Re: [PATCH v9 2/2] media:imx274 V4l2 driver for Sony imx274 CMOS sensor
Hi Vishal, In probe(), it calls imx274_load_default(imx274), which has I2C register read/write to the IMX274. If it fails, it will exit probe(). So it works as a sensor detection function as you suggested. Regards, Leon Luo 1130 Cadillac CT Milpitas, CA 95035 Phone: (510)371-1169 Fax: (408) 217-1960 Email: le...@leopardimaging.com www.leopardimaging.com On Thu, Nov 2, 2017 at 9:36 PM, Vishal Sagar wrote: > Hi Leon, > > I understand this fixes correctly freeing the v4l control handlers in probe(). > > But if there is a scenario where the sensor is mounted on a removable > daughter card, > shouldn't the probe fail if the daughter card is not connected? > A sample read/write to an IMX274 register should be sufficient to confirm > this in the probe() and fail. > > Does it make sense to add this in the probe()? > > Regards > Vishal Sagar > >> -Original Message- >> From: linux-media-ow...@vger.kernel.org [mailto:linux-media- >> ow...@vger.kernel.org] On Behalf Of Leon Luo >> Sent: Thursday, October 26, 2017 12:21 PM >> To: mche...@kernel.org; robh...@kernel.org; mark.rutl...@arm.com; >> hans.verk...@cisco.com; sakari.ai...@linux.intel.com >> Cc: linux-me...@vger.kernel.org; devicet...@vger.kernel.org; linux- >> ker...@vger.kernel.org; le...@leopardimaging.com; Soren Brinkmann >> >> Subject: [PATCH v9 2/2] media:imx274 V4l2 driver for Sony imx274 CMOS sensor >> >> The imx274 is a Sony CMOS image sensor that has 1/2.5 image size. >> It supports up to 3840x2160 (4K) 60fps, 1080p 120fps. The interface >> is 4-lane MIPI CSI-2 running at 1.44Gbps each. >> >> This driver has been tested on Xilinx ZCU102 platform with a Leopard >> LI-IMX274MIPI-FMC camera board. >> >> Support for the following features: >> -Resolutions: 3840x2160, 1920x1080, 1280x720 >> -Frame rate: 3840x2160 : 5 – 60fps >> 1920x1080 : 5 – 120fps >> 1280x720 : 5 – 120fps >> -Exposure time: 16 – (frame interval) micro-seconds >> -Gain: 1x - 180x >> -VFLIP: enable/disabledrivers/media/i2c/imx274.c >> -Test pattern: 12 test patterns >> >> Signed-off-by: Leon Luo >> Tested-by: Sören Brinkmann >> Acked-by: Sakari Ailus >> Acked-by: Chris Kohn >> --- >> v9: >> - remove v4l2_async_unregister_subdev from probe error >> v8: >> - check division by zero error >> v7: >> - use __v4l2_ctrl_s_ctrl instead of v4l2_ctrl_s_ctrl to have >>clean mutex_lock/mutex_unlock in imx274_s_stream() >> - define imx274_tp_regs[] as static, move the test pattern reg >>out of imx274_tp_regs[], and define it as a macro >>IMX274_TEST_PATTERN_REG >> v6: >> - remove media/v4l2-image-sizes.h from include header >> - make the header file alphabetical order >> - remove fmt->pad check in imx274_get_fmt, >>the V4L2 subdev framework does it already >> - change 'struct reg_8 *regs' to 'struct reg_8 regs[n]', >>where n is the exact numbers needed for this function >> - move MODULE_DEVICE_TABLE(of, imx274_of_id_table); closer >>to imx274_of_id_table definition >> - remove return check of imx274_write_table in imx274_remove, >>because it should remove all resources even i2c fails here >> - move imx274_load_default before v4l2_async_register_subdev >> v5: >> - no changes >> v4: >> - use 32-bit data type to avoid __divdi3 compile error for i386 >> - clean up OR together error codesdrivers/media/i2c/imx274.c >> v3: >> - clean up header files >> - use struct directly instead of alias #define >> - use v4l2_ctrl_s_ctrl instead of v4l2_s_ctrl >> - revise debug output >> - move static helpers closer to their call site >> - don't OR toegether error codes >> - use closest valid gain value instead of erroring out >> - assigne lock to the control handler and omit explicit locking >> - acquire mutex lock for imx274_get_fmt >> - remove format->pad check in imx274_set_fmt since the pad is always 0 >> - pass struct v4l2_ctrl pointer in gain/exposure/vlip/test pattern controls >> - remove priv->ctrls.vflip->val = val in imx274_set_vflip() >> - remove priv->ctrls.test_pattern->val = val in imx274_set_test_pattern() >> - remove empty open/close callbacks >> - remove empty core ops >> - add more error labels in probe >> - use v4l2_async_unregister_subdev instead of v4l2_device_unregister_subdev >> - use dynamic debug >> - split start_stream to two steps: imx274_mode_regs() and >> imx274_start_stream() >>frame rate & exposure can
RE: [PATCH v9 2/2] media:imx274 V4l2 driver for Sony imx274 CMOS sensor
Hi Leon, I understand this fixes correctly freeing the v4l control handlers in probe(). But if there is a scenario where the sensor is mounted on a removable daughter card, shouldn't the probe fail if the daughter card is not connected? A sample read/write to an IMX274 register should be sufficient to confirm this in the probe() and fail. Does it make sense to add this in the probe()? Regards Vishal Sagar > -Original Message- > From: linux-media-ow...@vger.kernel.org [mailto:linux-media- > ow...@vger.kernel.org] On Behalf Of Leon Luo > Sent: Thursday, October 26, 2017 12:21 PM > To: mche...@kernel.org; robh...@kernel.org; mark.rutl...@arm.com; > hans.verk...@cisco.com; sakari.ai...@linux.intel.com > Cc: linux-me...@vger.kernel.org; devicet...@vger.kernel.org; linux- > ker...@vger.kernel.org; le...@leopardimaging.com; Soren Brinkmann > > Subject: [PATCH v9 2/2] media:imx274 V4l2 driver for Sony imx274 CMOS sensor > > The imx274 is a Sony CMOS image sensor that has 1/2.5 image size. > It supports up to 3840x2160 (4K) 60fps, 1080p 120fps. The interface > is 4-lane MIPI CSI-2 running at 1.44Gbps each. > > This driver has been tested on Xilinx ZCU102 platform with a Leopard > LI-IMX274MIPI-FMC camera board. > > Support for the following features: > -Resolutions: 3840x2160, 1920x1080, 1280x720 > -Frame rate: 3840x2160 : 5 – 60fps > 1920x1080 : 5 – 120fps > 1280x720 : 5 – 120fps > -Exposure time: 16 – (frame interval) micro-seconds > -Gain: 1x - 180x > -VFLIP: enable/disabledrivers/media/i2c/imx274.c > -Test pattern: 12 test patterns > > Signed-off-by: Leon Luo > Tested-by: Sören Brinkmann > Acked-by: Sakari Ailus > Acked-by: Chris Kohn > --- > v9: > - remove v4l2_async_unregister_subdev from probe error > v8: > - check division by zero error > v7: > - use __v4l2_ctrl_s_ctrl instead of v4l2_ctrl_s_ctrl to have >clean mutex_lock/mutex_unlock in imx274_s_stream() > - define imx274_tp_regs[] as static, move the test pattern reg >out of imx274_tp_regs[], and define it as a macro >IMX274_TEST_PATTERN_REG > v6: > - remove media/v4l2-image-sizes.h from include header > - make the header file alphabetical order > - remove fmt->pad check in imx274_get_fmt, >the V4L2 subdev framework does it already > - change 'struct reg_8 *regs' to 'struct reg_8 regs[n]', >where n is the exact numbers needed for this function > - move MODULE_DEVICE_TABLE(of, imx274_of_id_table); closer >to imx274_of_id_table definition > - remove return check of imx274_write_table in imx274_remove, >because it should remove all resources even i2c fails here > - move imx274_load_default before v4l2_async_register_subdev > v5: > - no changes > v4: > - use 32-bit data type to avoid __divdi3 compile error for i386 > - clean up OR together error codesdrivers/media/i2c/imx274.c > v3: > - clean up header files > - use struct directly instead of alias #define > - use v4l2_ctrl_s_ctrl instead of v4l2_s_ctrl > - revise debug output > - move static helpers closer to their call site > - don't OR toegether error codes > - use closest valid gain value instead of erroring out > - assigne lock to the control handler and omit explicit locking > - acquire mutex lock for imx274_get_fmt > - remove format->pad check in imx274_set_fmt since the pad is always 0 > - pass struct v4l2_ctrl pointer in gain/exposure/vlip/test pattern controls > - remove priv->ctrls.vflip->val = val in imx274_set_vflip() > - remove priv->ctrls.test_pattern->val = val in imx274_set_test_pattern() > - remove empty open/close callbacks > - remove empty core ops > - add more error labels in probe > - use v4l2_async_unregister_subdev instead of v4l2_device_unregister_subdev > - use dynamic debug > - split start_stream to two steps: imx274_mode_regs() and > imx274_start_stream() >frame rate & exposure can be updated >between imx274_mode_regs() & imx274_start_stream() > > v2: > - Fix Kconfig to not remove existing options > --- > drivers/media/i2c/Kconfig |7 + > drivers/media/i2c/Makefile |1 + > drivers/media/i2c/imx274.c | 1810 > > 3 files changed, 1818 insertions(+) > create mode 100644 drivers/media/i2c/imx274.c > > diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig > index 47113774a297..9659849e33a0 100644 > --- a/drivers/media/i2c/Kconfig > +++ b/drivers/media/i2c/Kconfig > @@ -555,6 +555,13 @@ config VIDEO_APTINA_PLL > config VIDEO_SMIAPP_PLL > tristate > > +config VIDEO_IMX274 > + tristate "Sony IMX274 sensor support" >
[PATCH v9 2/2] media:imx274 V4l2 driver for Sony imx274 CMOS sensor
The imx274 is a Sony CMOS image sensor that has 1/2.5 image size. It supports up to 3840x2160 (4K) 60fps, 1080p 120fps. The interface is 4-lane MIPI CSI-2 running at 1.44Gbps each. This driver has been tested on Xilinx ZCU102 platform with a Leopard LI-IMX274MIPI-FMC camera board. Support for the following features: -Resolutions: 3840x2160, 1920x1080, 1280x720 -Frame rate: 3840x2160 : 5 – 60fps 1920x1080 : 5 – 120fps 1280x720 : 5 – 120fps -Exposure time: 16 – (frame interval) micro-seconds -Gain: 1x - 180x -VFLIP: enable/disabledrivers/media/i2c/imx274.c -Test pattern: 12 test patterns Signed-off-by: Leon Luo Tested-by: Sören Brinkmann Acked-by: Sakari Ailus Acked-by: Chris Kohn --- v9: - remove v4l2_async_unregister_subdev from probe error v8: - check division by zero error v7: - use __v4l2_ctrl_s_ctrl instead of v4l2_ctrl_s_ctrl to have clean mutex_lock/mutex_unlock in imx274_s_stream() - define imx274_tp_regs[] as static, move the test pattern reg out of imx274_tp_regs[], and define it as a macro IMX274_TEST_PATTERN_REG v6: - remove media/v4l2-image-sizes.h from include header - make the header file alphabetical order - remove fmt->pad check in imx274_get_fmt, the V4L2 subdev framework does it already - change 'struct reg_8 *regs' to 'struct reg_8 regs[n]', where n is the exact numbers needed for this function - move MODULE_DEVICE_TABLE(of, imx274_of_id_table); closer to imx274_of_id_table definition - remove return check of imx274_write_table in imx274_remove, because it should remove all resources even i2c fails here - move imx274_load_default before v4l2_async_register_subdev v5: - no changes v4: - use 32-bit data type to avoid __divdi3 compile error for i386 - clean up OR together error codesdrivers/media/i2c/imx274.c v3: - clean up header files - use struct directly instead of alias #define - use v4l2_ctrl_s_ctrl instead of v4l2_s_ctrl - revise debug output - move static helpers closer to their call site - don't OR toegether error codes - use closest valid gain value instead of erroring out - assigne lock to the control handler and omit explicit locking - acquire mutex lock for imx274_get_fmt - remove format->pad check in imx274_set_fmt since the pad is always 0 - pass struct v4l2_ctrl pointer in gain/exposure/vlip/test pattern controls - remove priv->ctrls.vflip->val = val in imx274_set_vflip() - remove priv->ctrls.test_pattern->val = val in imx274_set_test_pattern() - remove empty open/close callbacks - remove empty core ops - add more error labels in probe - use v4l2_async_unregister_subdev instead of v4l2_device_unregister_subdev - use dynamic debug - split start_stream to two steps: imx274_mode_regs() and imx274_start_stream() frame rate & exposure can be updated between imx274_mode_regs() & imx274_start_stream() v2: - Fix Kconfig to not remove existing options --- drivers/media/i2c/Kconfig |7 + drivers/media/i2c/Makefile |1 + drivers/media/i2c/imx274.c | 1810 3 files changed, 1818 insertions(+) create mode 100644 drivers/media/i2c/imx274.c diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig index 47113774a297..9659849e33a0 100644 --- a/drivers/media/i2c/Kconfig +++ b/drivers/media/i2c/Kconfig @@ -555,6 +555,13 @@ config VIDEO_APTINA_PLL config VIDEO_SMIAPP_PLL tristate +config VIDEO_IMX274 + tristate "Sony IMX274 sensor support" + depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + ---help--- + This is a V4L2 sensor-level driver for the Sony IMX274 + CMOS image sensor. + config VIDEO_OV2640 tristate "OmniVision OV2640 sensor support" depends on VIDEO_V4L2 && I2C diff --git a/drivers/media/i2c/Makefile b/drivers/media/i2c/Makefile index c843c181dfb9..f8d57e453936 100644 --- a/drivers/media/i2c/Makefile +++ b/drivers/media/i2c/Makefile @@ -92,5 +92,6 @@ obj-$(CONFIG_VIDEO_IR_I2C) += ir-kbd-i2c.o obj-$(CONFIG_VIDEO_ML86V7667) += ml86v7667.o obj-$(CONFIG_VIDEO_OV2659) += ov2659.o obj-$(CONFIG_VIDEO_TC358743) += tc358743.o +obj-$(CONFIG_VIDEO_IMX274) += imx274.o obj-$(CONFIG_SDR_MAX2175) += max2175.o diff --git a/drivers/media/i2c/imx274.c b/drivers/media/i2c/imx274.c new file mode 100644 index ..737dbf59a0d2 --- /dev/null +++ b/drivers/media/i2c/imx274.c @@ -0,0 +1,1810 @@ +/* + * imx274.c - IMX274 CMOS Image Sensor driver + * + * Copyright (C) 2017, Leopard Imaging, Inc. + * + * Leon Luo + * Edwin Zou + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for