Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

media: i2c: ov8858: Don't set fwnode in the driver

This makes the driver work with the new check in
v4l2_async_register_subdev() that was introduced recently in 6.6-rc1.
Without this change, probe fails with:

ov8858 1-0036: Detected OV8858 sensor, revision 0xb2
ov8858 1-0036: sub-device fwnode is an endpoint!
ov8858 1-0036: v4l2 async register subdev failed
ov8858: probe of 1-0036 failed with error -22

This also simplifies the driver a bit.

Signed-off-by: Ondrej Jirman <megi@xff.cz>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>

authored by

Ondrej Jirman and committed by
Hans Verkuil
c46f16f1 1d4c2585

+2 -8
+2 -8
drivers/media/i2c/ov8858.c
··· 1850 1850 } 1851 1851 1852 1852 ret = v4l2_fwnode_endpoint_parse(endpoint, &vep); 1853 + fwnode_handle_put(endpoint); 1853 1854 if (ret) { 1854 1855 dev_err(dev, "Failed to parse endpoint: %d\n", ret); 1855 - fwnode_handle_put(endpoint); 1856 1856 return ret; 1857 1857 } 1858 1858 ··· 1864 1864 default: 1865 1865 dev_err(dev, "Unsupported number of data lanes %u\n", 1866 1866 ov8858->num_lanes); 1867 - fwnode_handle_put(endpoint); 1868 1867 return -EINVAL; 1869 1868 } 1870 - 1871 - ov8858->subdev.fwnode = endpoint; 1872 1869 1873 1870 return 0; 1874 1871 } ··· 1910 1913 1911 1914 ret = ov8858_init_ctrls(ov8858); 1912 1915 if (ret) 1913 - goto err_put_fwnode; 1916 + return ret; 1914 1917 1915 1918 sd = &ov8858->subdev; 1916 1919 sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE | V4L2_SUBDEV_FL_HAS_EVENTS; ··· 1961 1964 media_entity_cleanup(&sd->entity); 1962 1965 err_free_handler: 1963 1966 v4l2_ctrl_handler_free(&ov8858->ctrl_handler); 1964 - err_put_fwnode: 1965 - fwnode_handle_put(ov8858->subdev.fwnode); 1966 1967 1967 1968 return ret; 1968 1969 } ··· 1973 1978 v4l2_async_unregister_subdev(sd); 1974 1979 media_entity_cleanup(&sd->entity); 1975 1980 v4l2_ctrl_handler_free(&ov8858->ctrl_handler); 1976 - fwnode_handle_put(ov8858->subdev.fwnode); 1977 1981 1978 1982 pm_runtime_disable(&client->dev); 1979 1983 if (!pm_runtime_status_suspended(&client->dev))