mirror of https://gitee.com/openkylin/linux.git
[media] media: Move media_device link_notify operation to an ops structure
This will allow adding new operations without increasing the media_device structure size for drivers that don't implement any media device operation. Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Acked-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
This commit is contained in:
parent
dc3cdbc9d4
commit
68429f50ab
|
@ -808,17 +808,18 @@ int __media_entity_setup_link(struct media_link *link, u32 flags)
|
||||||
|
|
||||||
mdev = source->graph_obj.mdev;
|
mdev = source->graph_obj.mdev;
|
||||||
|
|
||||||
if (mdev->link_notify) {
|
if (mdev->ops && mdev->ops->link_notify) {
|
||||||
ret = mdev->link_notify(link, flags,
|
ret = mdev->ops->link_notify(link, flags,
|
||||||
MEDIA_DEV_NOTIFY_PRE_LINK_CH);
|
MEDIA_DEV_NOTIFY_PRE_LINK_CH);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = __media_entity_setup_link_notify(link, flags);
|
ret = __media_entity_setup_link_notify(link, flags);
|
||||||
|
|
||||||
if (mdev->link_notify)
|
if (mdev->ops && mdev->ops->link_notify)
|
||||||
mdev->link_notify(link, flags, MEDIA_DEV_NOTIFY_POST_LINK_CH);
|
mdev->ops->link_notify(link, flags,
|
||||||
|
MEDIA_DEV_NOTIFY_POST_LINK_CH);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1190,6 +1190,10 @@ static int fimc_md_link_notify(struct media_link *link, unsigned int flags,
|
||||||
return ret ? -EPIPE : 0;
|
return ret ? -EPIPE : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const struct media_device_ops fimc_md_ops = {
|
||||||
|
.link_notify = fimc_md_link_notify,
|
||||||
|
};
|
||||||
|
|
||||||
static ssize_t fimc_md_sysfs_show(struct device *dev,
|
static ssize_t fimc_md_sysfs_show(struct device *dev,
|
||||||
struct device_attribute *attr, char *buf)
|
struct device_attribute *attr, char *buf)
|
||||||
{
|
{
|
||||||
|
@ -1416,7 +1420,7 @@ static int fimc_md_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
strlcpy(fmd->media_dev.model, "SAMSUNG S5P FIMC",
|
strlcpy(fmd->media_dev.model, "SAMSUNG S5P FIMC",
|
||||||
sizeof(fmd->media_dev.model));
|
sizeof(fmd->media_dev.model));
|
||||||
fmd->media_dev.link_notify = fimc_md_link_notify;
|
fmd->media_dev.ops = &fimc_md_ops;
|
||||||
fmd->media_dev.dev = dev;
|
fmd->media_dev.dev = dev;
|
||||||
|
|
||||||
v4l2_dev = &fmd->v4l2_dev;
|
v4l2_dev = &fmd->v4l2_dev;
|
||||||
|
|
|
@ -657,6 +657,10 @@ static irqreturn_t isp_isr(int irq, void *_isp)
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const struct media_device_ops isp_media_ops = {
|
||||||
|
.link_notify = v4l2_pipeline_link_notify,
|
||||||
|
};
|
||||||
|
|
||||||
/* -----------------------------------------------------------------------------
|
/* -----------------------------------------------------------------------------
|
||||||
* Pipeline stream management
|
* Pipeline stream management
|
||||||
*/
|
*/
|
||||||
|
@ -1680,7 +1684,7 @@ static int isp_register_entities(struct isp_device *isp)
|
||||||
strlcpy(isp->media_dev.model, "TI OMAP3 ISP",
|
strlcpy(isp->media_dev.model, "TI OMAP3 ISP",
|
||||||
sizeof(isp->media_dev.model));
|
sizeof(isp->media_dev.model));
|
||||||
isp->media_dev.hw_revision = isp->revision;
|
isp->media_dev.hw_revision = isp->revision;
|
||||||
isp->media_dev.link_notify = v4l2_pipeline_link_notify;
|
isp->media_dev.ops = &isp_media_ops;
|
||||||
media_device_init(&isp->media_dev);
|
media_device_init(&isp->media_dev);
|
||||||
|
|
||||||
isp->v4l2_dev.mdev = &isp->media_dev;
|
isp->v4l2_dev.mdev = &isp->media_dev;
|
||||||
|
|
|
@ -362,6 +362,10 @@ static irqreturn_t iss_isr(int irq, void *_iss)
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const struct media_device_ops iss_media_ops = {
|
||||||
|
.link_notify = v4l2_pipeline_link_notify,
|
||||||
|
};
|
||||||
|
|
||||||
/* -----------------------------------------------------------------------------
|
/* -----------------------------------------------------------------------------
|
||||||
* Pipeline stream management
|
* Pipeline stream management
|
||||||
*/
|
*/
|
||||||
|
@ -988,7 +992,7 @@ static int iss_register_entities(struct iss_device *iss)
|
||||||
strlcpy(iss->media_dev.model, "TI OMAP4 ISS",
|
strlcpy(iss->media_dev.model, "TI OMAP4 ISS",
|
||||||
sizeof(iss->media_dev.model));
|
sizeof(iss->media_dev.model));
|
||||||
iss->media_dev.hw_revision = iss->revision;
|
iss->media_dev.hw_revision = iss->revision;
|
||||||
iss->media_dev.link_notify = v4l2_pipeline_link_notify;
|
iss->media_dev.ops = &iss_media_ops;
|
||||||
ret = media_device_register(&iss->media_dev);
|
ret = media_device_register(&iss->media_dev);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(iss->dev, "Media device registration failed (%d)\n",
|
dev_err(iss->dev, "Media device registration failed (%d)\n",
|
||||||
|
|
|
@ -48,6 +48,16 @@ struct media_entity_notify {
|
||||||
void (*notify)(struct media_entity *entity, void *notify_data);
|
void (*notify)(struct media_entity *entity, void *notify_data);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct media_device_ops - Media device operations
|
||||||
|
* @link_notify: Link state change notification callback. This callback is
|
||||||
|
* called with the graph_mutex held.
|
||||||
|
*/
|
||||||
|
struct media_device_ops {
|
||||||
|
int (*link_notify)(struct media_link *link, u32 flags,
|
||||||
|
unsigned int notification);
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct media_device - Media device
|
* struct media_device - Media device
|
||||||
* @dev: Parent device
|
* @dev: Parent device
|
||||||
|
@ -80,8 +90,7 @@ struct media_entity_notify {
|
||||||
* @enable_source: Enable Source Handler function pointer
|
* @enable_source: Enable Source Handler function pointer
|
||||||
* @disable_source: Disable Source Handler function pointer
|
* @disable_source: Disable Source Handler function pointer
|
||||||
*
|
*
|
||||||
* @link_notify: Link state change notification callback. This callback is
|
* @ops: Operation handler callbacks
|
||||||
* called with the graph_mutex held.
|
|
||||||
*
|
*
|
||||||
* This structure represents an abstract high-level media device. It allows easy
|
* This structure represents an abstract high-level media device. It allows easy
|
||||||
* access to entities and provides basic media device-level support. The
|
* access to entities and provides basic media device-level support. The
|
||||||
|
@ -150,8 +159,7 @@ struct media_device {
|
||||||
struct media_pipeline *pipe);
|
struct media_pipeline *pipe);
|
||||||
void (*disable_source)(struct media_entity *entity);
|
void (*disable_source)(struct media_entity *entity);
|
||||||
|
|
||||||
int (*link_notify)(struct media_link *link, u32 flags,
|
const struct media_device_ops *ops;
|
||||||
unsigned int notification);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* We don't need to include pci.h or usb.h here */
|
/* We don't need to include pci.h or usb.h here */
|
||||||
|
|
Loading…
Reference in New Issue