media: staging/imx: pass fwnode handle to find/add async subdev
Pass the subdev's fwnode_handle to imx_media_find_async_subdev() and imx_media_add_async_subdev(), instead of a device_node. Signed-off-by: Steve Longerbeam <steve_longerbeam@mentor.com> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
This commit is contained in:
parent
4dadf0562b
commit
4eef678d32
|
@ -33,15 +33,14 @@ static inline struct imx_media_dev *notifier2dev(struct v4l2_async_notifier *n)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Find a subdev by device node or device name. This is called during
|
* Find a subdev by fwnode or device name. This is called during
|
||||||
* driver load to form the async subdev list and bind them.
|
* driver load to form the async subdev list and bind them.
|
||||||
*/
|
*/
|
||||||
struct imx_media_subdev *
|
struct imx_media_subdev *
|
||||||
imx_media_find_async_subdev(struct imx_media_dev *imxmd,
|
imx_media_find_async_subdev(struct imx_media_dev *imxmd,
|
||||||
struct device_node *np,
|
struct fwnode_handle *fwnode,
|
||||||
const char *devname)
|
const char *devname)
|
||||||
{
|
{
|
||||||
struct fwnode_handle *fwnode = np ? of_fwnode_handle(np) : NULL;
|
|
||||||
struct imx_media_subdev *imxsd;
|
struct imx_media_subdev *imxsd;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -67,7 +66,7 @@ imx_media_find_async_subdev(struct imx_media_dev *imxmd,
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Adds a subdev to the async subdev list. If np is non-NULL, adds
|
* Adds a subdev to the async subdev list. If fwnode is non-NULL, adds
|
||||||
* the async as a V4L2_ASYNC_MATCH_FWNODE match type, otherwise as
|
* the async as a V4L2_ASYNC_MATCH_FWNODE match type, otherwise as
|
||||||
* a V4L2_ASYNC_MATCH_DEVNAME match type using the dev_name of the
|
* a V4L2_ASYNC_MATCH_DEVNAME match type using the dev_name of the
|
||||||
* given platform_device. This is called during driver load when
|
* given platform_device. This is called during driver load when
|
||||||
|
@ -75,9 +74,10 @@ imx_media_find_async_subdev(struct imx_media_dev *imxmd,
|
||||||
*/
|
*/
|
||||||
struct imx_media_subdev *
|
struct imx_media_subdev *
|
||||||
imx_media_add_async_subdev(struct imx_media_dev *imxmd,
|
imx_media_add_async_subdev(struct imx_media_dev *imxmd,
|
||||||
struct device_node *np,
|
struct fwnode_handle *fwnode,
|
||||||
struct platform_device *pdev)
|
struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
|
struct device_node *np = to_of_node(fwnode);
|
||||||
struct imx_media_subdev *imxsd;
|
struct imx_media_subdev *imxsd;
|
||||||
struct v4l2_async_subdev *asd;
|
struct v4l2_async_subdev *asd;
|
||||||
const char *devname = NULL;
|
const char *devname = NULL;
|
||||||
|
@ -89,7 +89,7 @@ imx_media_add_async_subdev(struct imx_media_dev *imxmd,
|
||||||
devname = dev_name(&pdev->dev);
|
devname = dev_name(&pdev->dev);
|
||||||
|
|
||||||
/* return -EEXIST if this subdev already added */
|
/* return -EEXIST if this subdev already added */
|
||||||
if (imx_media_find_async_subdev(imxmd, np, devname)) {
|
if (imx_media_find_async_subdev(imxmd, fwnode, devname)) {
|
||||||
dev_dbg(imxmd->md.dev, "%s: already added %s\n",
|
dev_dbg(imxmd->md.dev, "%s: already added %s\n",
|
||||||
__func__, np ? np->name : devname);
|
__func__, np ? np->name : devname);
|
||||||
imxsd = ERR_PTR(-EEXIST);
|
imxsd = ERR_PTR(-EEXIST);
|
||||||
|
@ -107,9 +107,9 @@ imx_media_add_async_subdev(struct imx_media_dev *imxmd,
|
||||||
imxsd = &imxmd->subdev[sd_idx];
|
imxsd = &imxmd->subdev[sd_idx];
|
||||||
|
|
||||||
asd = &imxsd->asd;
|
asd = &imxsd->asd;
|
||||||
if (np) {
|
if (fwnode) {
|
||||||
asd->match_type = V4L2_ASYNC_MATCH_FWNODE;
|
asd->match_type = V4L2_ASYNC_MATCH_FWNODE;
|
||||||
asd->match.fwnode.fwnode = of_fwnode_handle(np);
|
asd->match.fwnode.fwnode = fwnode;
|
||||||
} else {
|
} else {
|
||||||
asd->match_type = V4L2_ASYNC_MATCH_DEVNAME;
|
asd->match_type = V4L2_ASYNC_MATCH_DEVNAME;
|
||||||
asd->match.device_name.name = devname;
|
asd->match.device_name.name = devname;
|
||||||
|
@ -162,13 +162,13 @@ static int imx_media_subdev_bound(struct v4l2_async_notifier *notifier,
|
||||||
struct v4l2_async_subdev *asd)
|
struct v4l2_async_subdev *asd)
|
||||||
{
|
{
|
||||||
struct imx_media_dev *imxmd = notifier2dev(notifier);
|
struct imx_media_dev *imxmd = notifier2dev(notifier);
|
||||||
struct device_node *np = to_of_node(sd->fwnode);
|
|
||||||
struct imx_media_subdev *imxsd;
|
struct imx_media_subdev *imxsd;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
mutex_lock(&imxmd->mutex);
|
mutex_lock(&imxmd->mutex);
|
||||||
|
|
||||||
imxsd = imx_media_find_async_subdev(imxmd, np, dev_name(sd->dev));
|
imxsd = imx_media_find_async_subdev(imxmd, sd->fwnode,
|
||||||
|
dev_name(sd->dev));
|
||||||
if (!imxsd) {
|
if (!imxsd) {
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto out;
|
goto out;
|
||||||
|
|
|
@ -87,7 +87,8 @@ of_parse_subdev(struct imx_media_dev *imxmd, struct device_node *sd_np,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* register this subdev with async notifier */
|
/* register this subdev with async notifier */
|
||||||
imxsd = imx_media_add_async_subdev(imxmd, sd_np, NULL);
|
imxsd = imx_media_add_async_subdev(imxmd, of_fwnode_handle(sd_np),
|
||||||
|
NULL);
|
||||||
ret = PTR_ERR_OR_ZERO(imxsd);
|
ret = PTR_ERR_OR_ZERO(imxsd);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
if (ret == -EEXIST) {
|
if (ret == -EEXIST) {
|
||||||
|
@ -176,9 +177,7 @@ static int create_of_link(struct imx_media_dev *imxmd,
|
||||||
if (link->local_port >= sd->entity.num_pads)
|
if (link->local_port >= sd->entity.num_pads)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
remote = imx_media_find_async_subdev(imxmd,
|
remote = imx_media_find_async_subdev(imxmd, link->remote_node, NULL);
|
||||||
to_of_node(link->remote_node),
|
|
||||||
NULL);
|
|
||||||
if (!remote)
|
if (!remote)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
|
@ -189,11 +189,11 @@ int imx_media_ipu_image_to_mbus_fmt(struct v4l2_mbus_framefmt *mbus,
|
||||||
|
|
||||||
struct imx_media_subdev *
|
struct imx_media_subdev *
|
||||||
imx_media_find_async_subdev(struct imx_media_dev *imxmd,
|
imx_media_find_async_subdev(struct imx_media_dev *imxmd,
|
||||||
struct device_node *np,
|
struct fwnode_handle *fwnode,
|
||||||
const char *devname);
|
const char *devname);
|
||||||
struct imx_media_subdev *
|
struct imx_media_subdev *
|
||||||
imx_media_add_async_subdev(struct imx_media_dev *imxmd,
|
imx_media_add_async_subdev(struct imx_media_dev *imxmd,
|
||||||
struct device_node *np,
|
struct fwnode_handle *fwnode,
|
||||||
struct platform_device *pdev);
|
struct platform_device *pdev);
|
||||||
|
|
||||||
void imx_media_grp_id_to_sd_name(char *sd_name, int sz,
|
void imx_media_grp_id_to_sd_name(char *sd_name, int sz,
|
||||||
|
|
Loading…
Reference in New Issue