[media] omap3/omap4/davinci: get rid of MEDIA_ENT_T_V4L2_SUBDEV abuse
On omap3/omap4/davinci drivers, MEDIA_ENT_T_V4L2_SUBDEV macro is abused in order to "simplify" the pad checks. Basically, it does a logical or of this macro, in order to check for a local index and if the entity is either a subdev or not. As we'll get rid of MEDIA_ENT_T_V4L2_SUBDEV macro, replace it by 2 << 16 where it occurs, and add a note saying that the code there is actually a hack. Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:
parent
3efdf62c5f
commit
59ecd59d78
12 changed files with 106 additions and 51 deletions
|
@ -2513,9 +2513,14 @@ static int ccdc_link_setup(struct media_entity *entity,
|
||||||
struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
|
struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
|
||||||
struct isp_ccdc_device *ccdc = v4l2_get_subdevdata(sd);
|
struct isp_ccdc_device *ccdc = v4l2_get_subdevdata(sd);
|
||||||
struct isp_device *isp = to_isp_device(ccdc);
|
struct isp_device *isp = to_isp_device(ccdc);
|
||||||
|
int index = local->index;
|
||||||
|
|
||||||
switch (local->index | media_entity_type(remote->entity)) {
|
/* FIXME: this is actually a hack! */
|
||||||
case CCDC_PAD_SINK | MEDIA_ENT_T_V4L2_SUBDEV:
|
if (is_media_entity_v4l2_subdev(remote->entity))
|
||||||
|
index |= 2 << 16;
|
||||||
|
|
||||||
|
switch (index) {
|
||||||
|
case CCDC_PAD_SINK | 2 << 16:
|
||||||
/* Read from the sensor (parallel interface), CCP2, CSI2a or
|
/* Read from the sensor (parallel interface), CCP2, CSI2a or
|
||||||
* CSI2c.
|
* CSI2c.
|
||||||
*/
|
*/
|
||||||
|
@ -2543,7 +2548,7 @@ static int ccdc_link_setup(struct media_entity *entity,
|
||||||
* Revisit this when it will be implemented, and return -EBUSY for now.
|
* Revisit this when it will be implemented, and return -EBUSY for now.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
case CCDC_PAD_SOURCE_VP | MEDIA_ENT_T_V4L2_SUBDEV:
|
case CCDC_PAD_SOURCE_VP | 2 << 16:
|
||||||
/* Write to preview engine, histogram and H3A. When none of
|
/* Write to preview engine, histogram and H3A. When none of
|
||||||
* those links are active, the video port can be disabled.
|
* those links are active, the video port can be disabled.
|
||||||
*/
|
*/
|
||||||
|
@ -2556,7 +2561,7 @@ static int ccdc_link_setup(struct media_entity *entity,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CCDC_PAD_SOURCE_OF | MEDIA_ENT_T_DEVNODE:
|
case CCDC_PAD_SOURCE_OF:
|
||||||
/* Write to memory */
|
/* Write to memory */
|
||||||
if (flags & MEDIA_LNK_FL_ENABLED) {
|
if (flags & MEDIA_LNK_FL_ENABLED) {
|
||||||
if (ccdc->output & ~CCDC_OUTPUT_MEMORY)
|
if (ccdc->output & ~CCDC_OUTPUT_MEMORY)
|
||||||
|
@ -2567,7 +2572,7 @@ static int ccdc_link_setup(struct media_entity *entity,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CCDC_PAD_SOURCE_OF | MEDIA_ENT_T_V4L2_SUBDEV:
|
case CCDC_PAD_SOURCE_OF | 2 << 16:
|
||||||
/* Write to resizer */
|
/* Write to resizer */
|
||||||
if (flags & MEDIA_LNK_FL_ENABLED) {
|
if (flags & MEDIA_LNK_FL_ENABLED) {
|
||||||
if (ccdc->output & ~CCDC_OUTPUT_RESIZER)
|
if (ccdc->output & ~CCDC_OUTPUT_RESIZER)
|
||||||
|
|
|
@ -956,9 +956,14 @@ static int ccp2_link_setup(struct media_entity *entity,
|
||||||
{
|
{
|
||||||
struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
|
struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
|
||||||
struct isp_ccp2_device *ccp2 = v4l2_get_subdevdata(sd);
|
struct isp_ccp2_device *ccp2 = v4l2_get_subdevdata(sd);
|
||||||
|
int index = local->index;
|
||||||
|
|
||||||
switch (local->index | media_entity_type(remote->entity)) {
|
/* FIXME: this is actually a hack! */
|
||||||
case CCP2_PAD_SINK | MEDIA_ENT_T_DEVNODE:
|
if (is_media_entity_v4l2_subdev(remote->entity))
|
||||||
|
index |= 2 << 16;
|
||||||
|
|
||||||
|
switch (index) {
|
||||||
|
case CCP2_PAD_SINK:
|
||||||
/* read from memory */
|
/* read from memory */
|
||||||
if (flags & MEDIA_LNK_FL_ENABLED) {
|
if (flags & MEDIA_LNK_FL_ENABLED) {
|
||||||
if (ccp2->input == CCP2_INPUT_SENSOR)
|
if (ccp2->input == CCP2_INPUT_SENSOR)
|
||||||
|
@ -970,7 +975,7 @@ static int ccp2_link_setup(struct media_entity *entity,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CCP2_PAD_SINK | MEDIA_ENT_T_V4L2_SUBDEV:
|
case CCP2_PAD_SINK | 2 << 16:
|
||||||
/* read from sensor/phy */
|
/* read from sensor/phy */
|
||||||
if (flags & MEDIA_LNK_FL_ENABLED) {
|
if (flags & MEDIA_LNK_FL_ENABLED) {
|
||||||
if (ccp2->input == CCP2_INPUT_MEMORY)
|
if (ccp2->input == CCP2_INPUT_MEMORY)
|
||||||
|
@ -981,7 +986,7 @@ static int ccp2_link_setup(struct media_entity *entity,
|
||||||
ccp2->input = CCP2_INPUT_NONE;
|
ccp2->input = CCP2_INPUT_NONE;
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case CCP2_PAD_SOURCE | MEDIA_ENT_T_V4L2_SUBDEV:
|
case CCP2_PAD_SOURCE | 2 << 16:
|
||||||
/* write to video port/ccdc */
|
/* write to video port/ccdc */
|
||||||
if (flags & MEDIA_LNK_FL_ENABLED)
|
if (flags & MEDIA_LNK_FL_ENABLED)
|
||||||
ccp2->output = CCP2_OUTPUT_CCDC;
|
ccp2->output = CCP2_OUTPUT_CCDC;
|
||||||
|
|
|
@ -1144,14 +1144,19 @@ static int csi2_link_setup(struct media_entity *entity,
|
||||||
struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
|
struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
|
||||||
struct isp_csi2_device *csi2 = v4l2_get_subdevdata(sd);
|
struct isp_csi2_device *csi2 = v4l2_get_subdevdata(sd);
|
||||||
struct isp_csi2_ctrl_cfg *ctrl = &csi2->ctrl;
|
struct isp_csi2_ctrl_cfg *ctrl = &csi2->ctrl;
|
||||||
|
int index = local->index;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The ISP core doesn't support pipelines with multiple video outputs.
|
* The ISP core doesn't support pipelines with multiple video outputs.
|
||||||
* Revisit this when it will be implemented, and return -EBUSY for now.
|
* Revisit this when it will be implemented, and return -EBUSY for now.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
switch (local->index | media_entity_type(remote->entity)) {
|
/* FIXME: this is actually a hack! */
|
||||||
case CSI2_PAD_SOURCE | MEDIA_ENT_T_DEVNODE:
|
if (is_media_entity_v4l2_subdev(remote->entity))
|
||||||
|
index |= 2 << 16;
|
||||||
|
|
||||||
|
switch (index) {
|
||||||
|
case CSI2_PAD_SOURCE:
|
||||||
if (flags & MEDIA_LNK_FL_ENABLED) {
|
if (flags & MEDIA_LNK_FL_ENABLED) {
|
||||||
if (csi2->output & ~CSI2_OUTPUT_MEMORY)
|
if (csi2->output & ~CSI2_OUTPUT_MEMORY)
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
|
@ -1161,7 +1166,7 @@ static int csi2_link_setup(struct media_entity *entity,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CSI2_PAD_SOURCE | MEDIA_ENT_T_V4L2_SUBDEV:
|
case CSI2_PAD_SOURCE | 2 << 16:
|
||||||
if (flags & MEDIA_LNK_FL_ENABLED) {
|
if (flags & MEDIA_LNK_FL_ENABLED) {
|
||||||
if (csi2->output & ~CSI2_OUTPUT_CCDC)
|
if (csi2->output & ~CSI2_OUTPUT_CCDC)
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
|
|
|
@ -2144,9 +2144,14 @@ static int preview_link_setup(struct media_entity *entity,
|
||||||
{
|
{
|
||||||
struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
|
struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
|
||||||
struct isp_prev_device *prev = v4l2_get_subdevdata(sd);
|
struct isp_prev_device *prev = v4l2_get_subdevdata(sd);
|
||||||
|
int index = local->index;
|
||||||
|
|
||||||
switch (local->index | media_entity_type(remote->entity)) {
|
/* FIXME: this is actually a hack! */
|
||||||
case PREV_PAD_SINK | MEDIA_ENT_T_DEVNODE:
|
if (is_media_entity_v4l2_subdev(remote->entity))
|
||||||
|
index |= 2 << 16;
|
||||||
|
|
||||||
|
switch (index) {
|
||||||
|
case PREV_PAD_SINK:
|
||||||
/* read from memory */
|
/* read from memory */
|
||||||
if (flags & MEDIA_LNK_FL_ENABLED) {
|
if (flags & MEDIA_LNK_FL_ENABLED) {
|
||||||
if (prev->input == PREVIEW_INPUT_CCDC)
|
if (prev->input == PREVIEW_INPUT_CCDC)
|
||||||
|
@ -2158,7 +2163,7 @@ static int preview_link_setup(struct media_entity *entity,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PREV_PAD_SINK | MEDIA_ENT_T_V4L2_SUBDEV:
|
case PREV_PAD_SINK | 2 << 16:
|
||||||
/* read from ccdc */
|
/* read from ccdc */
|
||||||
if (flags & MEDIA_LNK_FL_ENABLED) {
|
if (flags & MEDIA_LNK_FL_ENABLED) {
|
||||||
if (prev->input == PREVIEW_INPUT_MEMORY)
|
if (prev->input == PREVIEW_INPUT_MEMORY)
|
||||||
|
@ -2175,7 +2180,7 @@ static int preview_link_setup(struct media_entity *entity,
|
||||||
* Revisit this when it will be implemented, and return -EBUSY for now.
|
* Revisit this when it will be implemented, and return -EBUSY for now.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
case PREV_PAD_SOURCE | MEDIA_ENT_T_DEVNODE:
|
case PREV_PAD_SOURCE:
|
||||||
/* write to memory */
|
/* write to memory */
|
||||||
if (flags & MEDIA_LNK_FL_ENABLED) {
|
if (flags & MEDIA_LNK_FL_ENABLED) {
|
||||||
if (prev->output & ~PREVIEW_OUTPUT_MEMORY)
|
if (prev->output & ~PREVIEW_OUTPUT_MEMORY)
|
||||||
|
@ -2186,7 +2191,7 @@ static int preview_link_setup(struct media_entity *entity,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PREV_PAD_SOURCE | MEDIA_ENT_T_V4L2_SUBDEV:
|
case PREV_PAD_SOURCE | 2 << 16:
|
||||||
/* write to resizer */
|
/* write to resizer */
|
||||||
if (flags & MEDIA_LNK_FL_ENABLED) {
|
if (flags & MEDIA_LNK_FL_ENABLED) {
|
||||||
if (prev->output & ~PREVIEW_OUTPUT_RESIZER)
|
if (prev->output & ~PREVIEW_OUTPUT_RESIZER)
|
||||||
|
|
|
@ -1623,9 +1623,14 @@ static int resizer_link_setup(struct media_entity *entity,
|
||||||
{
|
{
|
||||||
struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
|
struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
|
||||||
struct isp_res_device *res = v4l2_get_subdevdata(sd);
|
struct isp_res_device *res = v4l2_get_subdevdata(sd);
|
||||||
|
int index = local->index;
|
||||||
|
|
||||||
switch (local->index | media_entity_type(remote->entity)) {
|
/* FIXME: this is actually a hack! */
|
||||||
case RESZ_PAD_SINK | MEDIA_ENT_T_DEVNODE:
|
if (is_media_entity_v4l2_subdev(remote->entity))
|
||||||
|
index |= 2 << 16;
|
||||||
|
|
||||||
|
switch (index) {
|
||||||
|
case RESZ_PAD_SINK:
|
||||||
/* read from memory */
|
/* read from memory */
|
||||||
if (flags & MEDIA_LNK_FL_ENABLED) {
|
if (flags & MEDIA_LNK_FL_ENABLED) {
|
||||||
if (res->input == RESIZER_INPUT_VP)
|
if (res->input == RESIZER_INPUT_VP)
|
||||||
|
@ -1637,7 +1642,7 @@ static int resizer_link_setup(struct media_entity *entity,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RESZ_PAD_SINK | MEDIA_ENT_T_V4L2_SUBDEV:
|
case RESZ_PAD_SINK | 2 << 16:
|
||||||
/* read from ccdc or previewer */
|
/* read from ccdc or previewer */
|
||||||
if (flags & MEDIA_LNK_FL_ENABLED) {
|
if (flags & MEDIA_LNK_FL_ENABLED) {
|
||||||
if (res->input == RESIZER_INPUT_MEMORY)
|
if (res->input == RESIZER_INPUT_MEMORY)
|
||||||
|
@ -1649,7 +1654,7 @@ static int resizer_link_setup(struct media_entity *entity,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RESZ_PAD_SOURCE | MEDIA_ENT_T_DEVNODE:
|
case RESZ_PAD_SOURCE:
|
||||||
/* resizer always write to memory */
|
/* resizer always write to memory */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -885,9 +885,14 @@ ipipeif_link_setup(struct media_entity *entity, const struct media_pad *local,
|
||||||
struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
|
struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
|
||||||
struct vpfe_ipipeif_device *ipipeif = v4l2_get_subdevdata(sd);
|
struct vpfe_ipipeif_device *ipipeif = v4l2_get_subdevdata(sd);
|
||||||
struct vpfe_device *vpfe = to_vpfe_device(ipipeif);
|
struct vpfe_device *vpfe = to_vpfe_device(ipipeif);
|
||||||
|
int index = local->index;
|
||||||
|
|
||||||
switch (local->index | media_entity_type(remote->entity)) {
|
/* FIXME: this is actually a hack! */
|
||||||
case IPIPEIF_PAD_SINK | MEDIA_ENT_T_DEVNODE:
|
if (is_media_entity_v4l2_subdev(remote->entity))
|
||||||
|
index |= 2 << 16;
|
||||||
|
|
||||||
|
switch (index) {
|
||||||
|
case IPIPEIF_PAD_SINK:
|
||||||
/* Single shot mode */
|
/* Single shot mode */
|
||||||
if (!(flags & MEDIA_LNK_FL_ENABLED)) {
|
if (!(flags & MEDIA_LNK_FL_ENABLED)) {
|
||||||
ipipeif->input = IPIPEIF_INPUT_NONE;
|
ipipeif->input = IPIPEIF_INPUT_NONE;
|
||||||
|
@ -896,7 +901,7 @@ ipipeif_link_setup(struct media_entity *entity, const struct media_pad *local,
|
||||||
ipipeif->input = IPIPEIF_INPUT_MEMORY;
|
ipipeif->input = IPIPEIF_INPUT_MEMORY;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IPIPEIF_PAD_SINK | MEDIA_ENT_T_V4L2_SUBDEV:
|
case IPIPEIF_PAD_SINK | 2 << 16:
|
||||||
/* read from isif */
|
/* read from isif */
|
||||||
if (!(flags & MEDIA_LNK_FL_ENABLED)) {
|
if (!(flags & MEDIA_LNK_FL_ENABLED)) {
|
||||||
ipipeif->input = IPIPEIF_INPUT_NONE;
|
ipipeif->input = IPIPEIF_INPUT_NONE;
|
||||||
|
@ -908,7 +913,7 @@ ipipeif_link_setup(struct media_entity *entity, const struct media_pad *local,
|
||||||
ipipeif->input = IPIPEIF_INPUT_ISIF;
|
ipipeif->input = IPIPEIF_INPUT_ISIF;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IPIPEIF_PAD_SOURCE | MEDIA_ENT_T_V4L2_SUBDEV:
|
case IPIPEIF_PAD_SOURCE | 2 << 16:
|
||||||
if (!(flags & MEDIA_LNK_FL_ENABLED)) {
|
if (!(flags & MEDIA_LNK_FL_ENABLED)) {
|
||||||
ipipeif->output = IPIPEIF_OUTPUT_NONE;
|
ipipeif->output = IPIPEIF_OUTPUT_NONE;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1707,9 +1707,14 @@ isif_link_setup(struct media_entity *entity, const struct media_pad *local,
|
||||||
{
|
{
|
||||||
struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
|
struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
|
||||||
struct vpfe_isif_device *isif = v4l2_get_subdevdata(sd);
|
struct vpfe_isif_device *isif = v4l2_get_subdevdata(sd);
|
||||||
|
int index = local->index;
|
||||||
|
|
||||||
switch (local->index | media_entity_type(remote->entity)) {
|
/* FIXME: this is actually a hack! */
|
||||||
case ISIF_PAD_SINK | MEDIA_ENT_T_V4L2_SUBDEV:
|
if (is_media_entity_v4l2_subdev(remote->entity))
|
||||||
|
index |= 2 << 16;
|
||||||
|
|
||||||
|
switch (index) {
|
||||||
|
case ISIF_PAD_SINK | 2 << 16:
|
||||||
/* read from decoder/sensor */
|
/* read from decoder/sensor */
|
||||||
if (!(flags & MEDIA_LNK_FL_ENABLED)) {
|
if (!(flags & MEDIA_LNK_FL_ENABLED)) {
|
||||||
isif->input = ISIF_INPUT_NONE;
|
isif->input = ISIF_INPUT_NONE;
|
||||||
|
@ -1720,7 +1725,7 @@ isif_link_setup(struct media_entity *entity, const struct media_pad *local,
|
||||||
isif->input = ISIF_INPUT_PARALLEL;
|
isif->input = ISIF_INPUT_PARALLEL;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ISIF_PAD_SOURCE | MEDIA_ENT_T_DEVNODE:
|
case ISIF_PAD_SOURCE:
|
||||||
/* write to memory */
|
/* write to memory */
|
||||||
if (flags & MEDIA_LNK_FL_ENABLED)
|
if (flags & MEDIA_LNK_FL_ENABLED)
|
||||||
isif->output = ISIF_OUTPUT_MEMORY;
|
isif->output = ISIF_OUTPUT_MEMORY;
|
||||||
|
@ -1728,7 +1733,7 @@ isif_link_setup(struct media_entity *entity, const struct media_pad *local,
|
||||||
isif->output = ISIF_OUTPUT_NONE;
|
isif->output = ISIF_OUTPUT_NONE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ISIF_PAD_SOURCE | MEDIA_ENT_T_V4L2_SUBDEV:
|
case ISIF_PAD_SOURCE | 2 << 16:
|
||||||
if (flags & MEDIA_LNK_FL_ENABLED)
|
if (flags & MEDIA_LNK_FL_ENABLED)
|
||||||
isif->output = ISIF_OUTPUT_IPIPEIF;
|
isif->output = ISIF_OUTPUT_IPIPEIF;
|
||||||
else
|
else
|
||||||
|
|
|
@ -1648,10 +1648,15 @@ static int resizer_link_setup(struct media_entity *entity,
|
||||||
struct vpfe_device *vpfe_dev = to_vpfe_device(resizer);
|
struct vpfe_device *vpfe_dev = to_vpfe_device(resizer);
|
||||||
u16 ipipeif_source = vpfe_dev->vpfe_ipipeif.output;
|
u16 ipipeif_source = vpfe_dev->vpfe_ipipeif.output;
|
||||||
u16 ipipe_source = vpfe_dev->vpfe_ipipe.output;
|
u16 ipipe_source = vpfe_dev->vpfe_ipipe.output;
|
||||||
|
int index = local->index;
|
||||||
|
|
||||||
|
/* FIXME: this is actually a hack! */
|
||||||
|
if (is_media_entity_v4l2_subdev(remote->entity))
|
||||||
|
index |= 2 << 16;
|
||||||
|
|
||||||
if (&resizer->crop_resizer.subdev == sd) {
|
if (&resizer->crop_resizer.subdev == sd) {
|
||||||
switch (local->index | media_entity_type(remote->entity)) {
|
switch (index) {
|
||||||
case RESIZER_CROP_PAD_SINK | MEDIA_ENT_T_V4L2_SUBDEV:
|
case RESIZER_CROP_PAD_SINK | 2 << 16:
|
||||||
if (!(flags & MEDIA_LNK_FL_ENABLED)) {
|
if (!(flags & MEDIA_LNK_FL_ENABLED)) {
|
||||||
resizer->crop_resizer.input =
|
resizer->crop_resizer.input =
|
||||||
RESIZER_CROP_INPUT_NONE;
|
RESIZER_CROP_INPUT_NONE;
|
||||||
|
@ -1671,7 +1676,7 @@ static int resizer_link_setup(struct media_entity *entity,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RESIZER_CROP_PAD_SOURCE | MEDIA_ENT_T_V4L2_SUBDEV:
|
case RESIZER_CROP_PAD_SOURCE | 2 << 16:
|
||||||
if (!(flags & MEDIA_LNK_FL_ENABLED)) {
|
if (!(flags & MEDIA_LNK_FL_ENABLED)) {
|
||||||
resizer->crop_resizer.output =
|
resizer->crop_resizer.output =
|
||||||
RESIZER_CROP_OUTPUT_NONE;
|
RESIZER_CROP_OUTPUT_NONE;
|
||||||
|
@ -1683,7 +1688,7 @@ static int resizer_link_setup(struct media_entity *entity,
|
||||||
resizer->crop_resizer.output = RESIZER_A;
|
resizer->crop_resizer.output = RESIZER_A;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RESIZER_CROP_PAD_SOURCE2 | MEDIA_ENT_T_V4L2_SUBDEV:
|
case RESIZER_CROP_PAD_SOURCE2 | 2 << 16:
|
||||||
if (!(flags & MEDIA_LNK_FL_ENABLED)) {
|
if (!(flags & MEDIA_LNK_FL_ENABLED)) {
|
||||||
resizer->crop_resizer.output2 =
|
resizer->crop_resizer.output2 =
|
||||||
RESIZER_CROP_OUTPUT_NONE;
|
RESIZER_CROP_OUTPUT_NONE;
|
||||||
|
@ -1699,8 +1704,8 @@ static int resizer_link_setup(struct media_entity *entity,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
} else if (&resizer->resizer_a.subdev == sd) {
|
} else if (&resizer->resizer_a.subdev == sd) {
|
||||||
switch (local->index | media_entity_type(remote->entity)) {
|
switch (index) {
|
||||||
case RESIZER_PAD_SINK | MEDIA_ENT_T_V4L2_SUBDEV:
|
case RESIZER_PAD_SINK | 2 << 16:
|
||||||
if (!(flags & MEDIA_LNK_FL_ENABLED)) {
|
if (!(flags & MEDIA_LNK_FL_ENABLED)) {
|
||||||
resizer->resizer_a.input = RESIZER_INPUT_NONE;
|
resizer->resizer_a.input = RESIZER_INPUT_NONE;
|
||||||
break;
|
break;
|
||||||
|
@ -1710,7 +1715,7 @@ static int resizer_link_setup(struct media_entity *entity,
|
||||||
resizer->resizer_a.input = RESIZER_INPUT_CROP_RESIZER;
|
resizer->resizer_a.input = RESIZER_INPUT_CROP_RESIZER;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RESIZER_PAD_SOURCE | MEDIA_ENT_T_DEVNODE:
|
case RESIZER_PAD_SOURCE:
|
||||||
if (!(flags & MEDIA_LNK_FL_ENABLED)) {
|
if (!(flags & MEDIA_LNK_FL_ENABLED)) {
|
||||||
resizer->resizer_a.output = RESIZER_OUTPUT_NONE;
|
resizer->resizer_a.output = RESIZER_OUTPUT_NONE;
|
||||||
break;
|
break;
|
||||||
|
@ -1724,8 +1729,8 @@ static int resizer_link_setup(struct media_entity *entity,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
} else if (&resizer->resizer_b.subdev == sd) {
|
} else if (&resizer->resizer_b.subdev == sd) {
|
||||||
switch (local->index | media_entity_type(remote->entity)) {
|
switch (index) {
|
||||||
case RESIZER_PAD_SINK | MEDIA_ENT_T_V4L2_SUBDEV:
|
case RESIZER_PAD_SINK | 2 << 16:
|
||||||
if (!(flags & MEDIA_LNK_FL_ENABLED)) {
|
if (!(flags & MEDIA_LNK_FL_ENABLED)) {
|
||||||
resizer->resizer_b.input = RESIZER_INPUT_NONE;
|
resizer->resizer_b.input = RESIZER_INPUT_NONE;
|
||||||
break;
|
break;
|
||||||
|
@ -1735,7 +1740,7 @@ static int resizer_link_setup(struct media_entity *entity,
|
||||||
resizer->resizer_b.input = RESIZER_INPUT_CROP_RESIZER;
|
resizer->resizer_b.input = RESIZER_INPUT_CROP_RESIZER;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RESIZER_PAD_SOURCE | MEDIA_ENT_T_DEVNODE:
|
case RESIZER_PAD_SOURCE:
|
||||||
if (!(flags & MEDIA_LNK_FL_ENABLED)) {
|
if (!(flags & MEDIA_LNK_FL_ENABLED)) {
|
||||||
resizer->resizer_b.output = RESIZER_OUTPUT_NONE;
|
resizer->resizer_b.output = RESIZER_OUTPUT_NONE;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -148,7 +148,7 @@ static void vpfe_prepare_pipeline(struct vpfe_video_device *video)
|
||||||
while ((entity = media_entity_graph_walk_next(&graph))) {
|
while ((entity = media_entity_graph_walk_next(&graph))) {
|
||||||
if (entity == &video->video_dev.entity)
|
if (entity == &video->video_dev.entity)
|
||||||
continue;
|
continue;
|
||||||
if ((!is_media_entity_v4l2_io(remote->entity))
|
if (!is_media_entity_v4l2_io(entity))
|
||||||
continue;
|
continue;
|
||||||
far_end = to_vpfe_video(media_entity_to_video_device(entity));
|
far_end = to_vpfe_video(media_entity_to_video_device(entity));
|
||||||
if (far_end->type == V4L2_BUF_TYPE_VIDEO_OUTPUT)
|
if (far_end->type == V4L2_BUF_TYPE_VIDEO_OUTPUT)
|
||||||
|
@ -293,7 +293,7 @@ static int vpfe_pipeline_enable(struct vpfe_pipeline *pipe)
|
||||||
media_entity_graph_walk_start(&graph, entity);
|
media_entity_graph_walk_start(&graph, entity);
|
||||||
while ((entity = media_entity_graph_walk_next(&graph))) {
|
while ((entity = media_entity_graph_walk_next(&graph))) {
|
||||||
|
|
||||||
if !is_media_entity_v4l2_subdev(entity))
|
if (!is_media_entity_v4l2_subdev(entity))
|
||||||
continue;
|
continue;
|
||||||
subdev = media_entity_to_v4l2_subdev(entity);
|
subdev = media_entity_to_v4l2_subdev(entity);
|
||||||
ret = v4l2_subdev_call(subdev, video, s_stream, 1);
|
ret = v4l2_subdev_call(subdev, video, s_stream, 1);
|
||||||
|
|
|
@ -1170,14 +1170,19 @@ static int csi2_link_setup(struct media_entity *entity,
|
||||||
struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
|
struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
|
||||||
struct iss_csi2_device *csi2 = v4l2_get_subdevdata(sd);
|
struct iss_csi2_device *csi2 = v4l2_get_subdevdata(sd);
|
||||||
struct iss_csi2_ctrl_cfg *ctrl = &csi2->ctrl;
|
struct iss_csi2_ctrl_cfg *ctrl = &csi2->ctrl;
|
||||||
|
int index = local->index;
|
||||||
|
|
||||||
|
/* FIXME: this is actually a hack! */
|
||||||
|
if (is_media_entity_v4l2_subdev(remote->entity))
|
||||||
|
index |= 2 << 16;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The ISS core doesn't support pipelines with multiple video outputs.
|
* The ISS core doesn't support pipelines with multiple video outputs.
|
||||||
* Revisit this when it will be implemented, and return -EBUSY for now.
|
* Revisit this when it will be implemented, and return -EBUSY for now.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
switch (local->index | media_entity_type(remote->entity)) {
|
switch (index) {
|
||||||
case CSI2_PAD_SOURCE | MEDIA_ENT_T_DEVNODE:
|
case CSI2_PAD_SOURCE:
|
||||||
if (flags & MEDIA_LNK_FL_ENABLED) {
|
if (flags & MEDIA_LNK_FL_ENABLED) {
|
||||||
if (csi2->output & ~CSI2_OUTPUT_MEMORY)
|
if (csi2->output & ~CSI2_OUTPUT_MEMORY)
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
|
@ -1187,7 +1192,7 @@ static int csi2_link_setup(struct media_entity *entity,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CSI2_PAD_SOURCE | MEDIA_ENT_T_V4L2_SUBDEV:
|
case CSI2_PAD_SOURCE | 2 << 16:
|
||||||
if (flags & MEDIA_LNK_FL_ENABLED) {
|
if (flags & MEDIA_LNK_FL_ENABLED) {
|
||||||
if (csi2->output & ~CSI2_OUTPUT_IPIPEIF)
|
if (csi2->output & ~CSI2_OUTPUT_IPIPEIF)
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
|
|
|
@ -662,9 +662,14 @@ static int ipipeif_link_setup(struct media_entity *entity,
|
||||||
struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
|
struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
|
||||||
struct iss_ipipeif_device *ipipeif = v4l2_get_subdevdata(sd);
|
struct iss_ipipeif_device *ipipeif = v4l2_get_subdevdata(sd);
|
||||||
struct iss_device *iss = to_iss_device(ipipeif);
|
struct iss_device *iss = to_iss_device(ipipeif);
|
||||||
|
int index = local->index;
|
||||||
|
|
||||||
switch (local->index | media_entity_type(remote->entity)) {
|
/* FIXME: this is actually a hack! */
|
||||||
case IPIPEIF_PAD_SINK | MEDIA_ENT_T_V4L2_SUBDEV:
|
if (is_media_entity_v4l2_subdev(remote->entity))
|
||||||
|
index |= 2 << 16;
|
||||||
|
|
||||||
|
switch (index) {
|
||||||
|
case IPIPEIF_PAD_SINK | 2 << 16:
|
||||||
/* Read from the sensor CSI2a or CSI2b. */
|
/* Read from the sensor CSI2a or CSI2b. */
|
||||||
if (!(flags & MEDIA_LNK_FL_ENABLED)) {
|
if (!(flags & MEDIA_LNK_FL_ENABLED)) {
|
||||||
ipipeif->input = IPIPEIF_INPUT_NONE;
|
ipipeif->input = IPIPEIF_INPUT_NONE;
|
||||||
|
@ -681,7 +686,7 @@ static int ipipeif_link_setup(struct media_entity *entity,
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IPIPEIF_PAD_SOURCE_ISIF_SF | MEDIA_ENT_T_DEVNODE:
|
case IPIPEIF_PAD_SOURCE_ISIF_SF:
|
||||||
/* Write to memory */
|
/* Write to memory */
|
||||||
if (flags & MEDIA_LNK_FL_ENABLED) {
|
if (flags & MEDIA_LNK_FL_ENABLED) {
|
||||||
if (ipipeif->output & ~IPIPEIF_OUTPUT_MEMORY)
|
if (ipipeif->output & ~IPIPEIF_OUTPUT_MEMORY)
|
||||||
|
@ -692,7 +697,7 @@ static int ipipeif_link_setup(struct media_entity *entity,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IPIPEIF_PAD_SOURCE_VP | MEDIA_ENT_T_V4L2_SUBDEV:
|
case IPIPEIF_PAD_SOURCE_VP | 2 << 16:
|
||||||
/* Send to IPIPE/RESIZER */
|
/* Send to IPIPE/RESIZER */
|
||||||
if (flags & MEDIA_LNK_FL_ENABLED) {
|
if (flags & MEDIA_LNK_FL_ENABLED) {
|
||||||
if (ipipeif->output & ~IPIPEIF_OUTPUT_VP)
|
if (ipipeif->output & ~IPIPEIF_OUTPUT_VP)
|
||||||
|
|
|
@ -716,9 +716,14 @@ static int resizer_link_setup(struct media_entity *entity,
|
||||||
struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
|
struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
|
||||||
struct iss_resizer_device *resizer = v4l2_get_subdevdata(sd);
|
struct iss_resizer_device *resizer = v4l2_get_subdevdata(sd);
|
||||||
struct iss_device *iss = to_iss_device(resizer);
|
struct iss_device *iss = to_iss_device(resizer);
|
||||||
|
int index = local->index;
|
||||||
|
|
||||||
switch (local->index | media_entity_type(remote->entity)) {
|
/* FIXME: this is actually a hack! */
|
||||||
case RESIZER_PAD_SINK | MEDIA_ENT_T_V4L2_SUBDEV:
|
if (is_media_entity_v4l2_subdev(remote->entity))
|
||||||
|
index |= 2 << 16;
|
||||||
|
|
||||||
|
switch (index) {
|
||||||
|
case RESIZER_PAD_SINK | 2 << 16:
|
||||||
/* Read from IPIPE or IPIPEIF. */
|
/* Read from IPIPE or IPIPEIF. */
|
||||||
if (!(flags & MEDIA_LNK_FL_ENABLED)) {
|
if (!(flags & MEDIA_LNK_FL_ENABLED)) {
|
||||||
resizer->input = RESIZER_INPUT_NONE;
|
resizer->input = RESIZER_INPUT_NONE;
|
||||||
|
@ -735,7 +740,7 @@ static int resizer_link_setup(struct media_entity *entity,
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RESIZER_PAD_SOURCE_MEM | MEDIA_ENT_T_DEVNODE:
|
case RESIZER_PAD_SOURCE_MEM:
|
||||||
/* Write to memory */
|
/* Write to memory */
|
||||||
if (flags & MEDIA_LNK_FL_ENABLED) {
|
if (flags & MEDIA_LNK_FL_ENABLED) {
|
||||||
if (resizer->output & ~RESIZER_OUTPUT_MEMORY)
|
if (resizer->output & ~RESIZER_OUTPUT_MEMORY)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue