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
[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
[PATCH v9 1/2] media:imx274 device tree binding file
The binding file for imx274 CMOS sensor V4l2 driver Signed-off-by: Leon Luo Acked-by: Sören Brinkmann Acked-by: Rob Herring --- v9: - add an entry in MAINTAINERS v8: - no changes v7: - no changes v6: - no changes v5: - add 'port' and 'endpoint' information v4: - no changes v3: - remove redundant properties and references - document 'reg' property v2: - no changes --- .../devicetree/bindings/media/i2c/imx274.txt | 33 ++ MAINTAINERS| 8 ++ 2 files changed, 41 insertions(+) create mode 100644 Documentation/devicetree/bindings/media/i2c/imx274.txt diff --git a/Documentation/devicetree/bindings/media/i2c/imx274.txt b/Documentation/devicetree/bindings/media/i2c/imx274.txt new file mode 100644 index ..80f2e89568e1 --- /dev/null +++ b/Documentation/devicetree/bindings/media/i2c/imx274.txt @@ -0,0 +1,33 @@ +* Sony 1/2.5-Inch 8.51Mp CMOS Digital Image Sensor + +The Sony imx274 is a 1/2.5-inch CMOS active pixel digital image sensor with +an active array size of 3864H x 2202V. It is programmable through I2C +interface. The I2C address is fixed to 0x1a as per sensor data sheet. +Image data is sent through MIPI CSI-2, which is configured as 4 lanes +at 1440 Mbps. + + +Required Properties: +- compatible: value should be "sony,imx274" for imx274 sensor +- reg: I2C bus address of the device + +Optional Properties: +- reset-gpios: Sensor reset GPIO + +The imx274 device node should contain one 'port' child node with +an 'endpoint' subnode. For further reading on port node refer to +Documentation/devicetree/bindings/media/video-interfaces.txt. + +Example: + sensor@1a { + compatible = "sony,imx274"; + reg = <0x1a>; + #address-cells = <1>; + #size-cells = <0>; + reset-gpios = <&gpio_sensor 0 0>; + port { + sensor_out: endpoint { + remote-endpoint = <&csiss_in>; + }; + }; + }; diff --git a/MAINTAINERS b/MAINTAINERS index 90230fe020f3..b5927bd4fe1e 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -12486,6 +12486,14 @@ S: Maintained F: drivers/ssb/ F: include/linux/ssb/ +SONY IMX274 SENSOR DRIVER +M: Leon Luo +L: linux-me...@vger.kernel.org +T: git git://linuxtv.org/media_tree.git +S: Maintained +F: drivers/media/i2c/imx274.c +F: Documentation/devicetree/bindings/media/i2c/imx274.txt + SONY MEMORYSTICK CARD SUPPORT M: Alex Dubov W: http://tifmxx.berlios.de/ -- 2.14.0.rc1
[PATCH v8 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 --- 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 | 1811 3 files changed, 1819 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 ..ab6a5f31da74 --- /dev/null +++ b/drivers/media/i2c/imx274.c @@ -0,0 +1,1811 @@ +/* + * 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
[PATCH v8 1/2] media:imx274 device tree binding file
The binding file for imx274 CMOS sensor V4l2 driver Signed-off-by: Leon Luo Acked-by: Sören Brinkmann Acked-by: Rob Herring --- v8: - no changes v7: - no changes v6: - no changes v5: - add 'port' and 'endpoint' information v4: - no changes v3: - remove redundant properties and references - document 'reg' property v2: - no changes --- .../devicetree/bindings/media/i2c/imx274.txt | 33 ++ 1 file changed, 33 insertions(+) create mode 100644 Documentation/devicetree/bindings/media/i2c/imx274.txt diff --git a/Documentation/devicetree/bindings/media/i2c/imx274.txt b/Documentation/devicetree/bindings/media/i2c/imx274.txt new file mode 100644 index ..80f2e89568e1 --- /dev/null +++ b/Documentation/devicetree/bindings/media/i2c/imx274.txt @@ -0,0 +1,33 @@ +* Sony 1/2.5-Inch 8.51Mp CMOS Digital Image Sensor + +The Sony imx274 is a 1/2.5-inch CMOS active pixel digital image sensor with +an active array size of 3864H x 2202V. It is programmable through I2C +interface. The I2C address is fixed to 0x1a as per sensor data sheet. +Image data is sent through MIPI CSI-2, which is configured as 4 lanes +at 1440 Mbps. + + +Required Properties: +- compatible: value should be "sony,imx274" for imx274 sensor +- reg: I2C bus address of the device + +Optional Properties: +- reset-gpios: Sensor reset GPIO + +The imx274 device node should contain one 'port' child node with +an 'endpoint' subnode. For further reading on port node refer to +Documentation/devicetree/bindings/media/video-interfaces.txt. + +Example: + sensor@1a { + compatible = "sony,imx274"; + reg = <0x1a>; + #address-cells = <1>; + #size-cells = <0>; + reset-gpios = <&gpio_sensor 0 0>; + port { + sensor_out: endpoint { + remote-endpoint = <&csiss_in>; + }; + }; + }; -- 2.14.0.rc1
[PATCH v7 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 --- 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 codes 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 | 1801 3 files changed, 1809 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 ..d9a4500dd367 --- /dev/null +++ b/drivers/media/i2c/imx274.c @@ -0,0 +1,1801 @@ +/* + * 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 + * more details. + * + * You should have re
[PATCH v7 1/2] media:imx274 device tree binding file
The binding file for imx274 CMOS sensor V4l2 driver Signed-off-by: Leon Luo Acked-by: Sören Brinkmann Acked-by: Rob Herring --- v7: - no changes v6: - no changes v5: - add 'port' and 'endpoint' information v4: - no changes v3: - remove redundant properties and references - document 'reg' property v2: - no changes --- .../devicetree/bindings/media/i2c/imx274.txt | 33 ++ 1 file changed, 33 insertions(+) create mode 100644 Documentation/devicetree/bindings/media/i2c/imx274.txt diff --git a/Documentation/devicetree/bindings/media/i2c/imx274.txt b/Documentation/devicetree/bindings/media/i2c/imx274.txt new file mode 100644 index ..80f2e89568e1 --- /dev/null +++ b/Documentation/devicetree/bindings/media/i2c/imx274.txt @@ -0,0 +1,33 @@ +* Sony 1/2.5-Inch 8.51Mp CMOS Digital Image Sensor + +The Sony imx274 is a 1/2.5-inch CMOS active pixel digital image sensor with +an active array size of 3864H x 2202V. It is programmable through I2C +interface. The I2C address is fixed to 0x1a as per sensor data sheet. +Image data is sent through MIPI CSI-2, which is configured as 4 lanes +at 1440 Mbps. + + +Required Properties: +- compatible: value should be "sony,imx274" for imx274 sensor +- reg: I2C bus address of the device + +Optional Properties: +- reset-gpios: Sensor reset GPIO + +The imx274 device node should contain one 'port' child node with +an 'endpoint' subnode. For further reading on port node refer to +Documentation/devicetree/bindings/media/video-interfaces.txt. + +Example: + sensor@1a { + compatible = "sony,imx274"; + reg = <0x1a>; + #address-cells = <1>; + #size-cells = <0>; + reset-gpios = <&gpio_sensor 0 0>; + port { + sensor_out: endpoint { + remote-endpoint = <&csiss_in>; + }; + }; + }; -- 2.14.0.rc1
[PATCH v6 1/2] media:imx274 device tree binding file
The binding file for imx274 CMOS sensor V4l2 driver Signed-off-by: Leon Luo --- v6: - no changes v5: - add 'port' and 'endpoint' information v4: - no changes v3: - remove redundant properties and references - document 'reg' property v2: - no changes --- .../devicetree/bindings/media/i2c/imx274.txt | 33 ++ 1 file changed, 33 insertions(+) create mode 100644 Documentation/devicetree/bindings/media/i2c/imx274.txt diff --git a/Documentation/devicetree/bindings/media/i2c/imx274.txt b/Documentation/devicetree/bindings/media/i2c/imx274.txt new file mode 100644 index ..80f2e89568e1 --- /dev/null +++ b/Documentation/devicetree/bindings/media/i2c/imx274.txt @@ -0,0 +1,33 @@ +* Sony 1/2.5-Inch 8.51Mp CMOS Digital Image Sensor + +The Sony imx274 is a 1/2.5-inch CMOS active pixel digital image sensor with +an active array size of 3864H x 2202V. It is programmable through I2C +interface. The I2C address is fixed to 0x1a as per sensor data sheet. +Image data is sent through MIPI CSI-2, which is configured as 4 lanes +at 1440 Mbps. + + +Required Properties: +- compatible: value should be "sony,imx274" for imx274 sensor +- reg: I2C bus address of the device + +Optional Properties: +- reset-gpios: Sensor reset GPIO + +The imx274 device node should contain one 'port' child node with +an 'endpoint' subnode. For further reading on port node refer to +Documentation/devicetree/bindings/media/video-interfaces.txt. + +Example: + sensor@1a { + compatible = "sony,imx274"; + reg = <0x1a>; + #address-cells = <1>; + #size-cells = <0>; + reset-gpios = <&gpio_sensor 0 0>; + port { + sensor_out: endpoint { + remote-endpoint = <&csiss_in>; + }; + }; + }; -- 2.14.0.rc1
[PATCH v6 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 --- 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 codes 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 | 1804 3 files changed, 1812 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 ..924d543682b0 --- /dev/null +++ b/drivers/media/i2c/imx274.c @@ -0,0 +1,1804 @@ +/* + * 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 + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#includ
[PATCH v5 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 --- v5: - no changes v4: - use 32-bit data type to avoid __divdi3 compile error for i386 - clean up OR together error codes 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 | 1808 3 files changed, 1816 insertions(+) create mode 100644 drivers/media/i2c/imx274.c diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig index 94153895fcd4..ad2e70a02363 100644 --- a/drivers/media/i2c/Kconfig +++ b/drivers/media/i2c/Kconfig @@ -547,6 +547,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 ..66cbfa81c030 --- /dev/null +++ b/drivers/media/i2c/imx274.c @@ -0,0 +1,1808 @@ +/* + * 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 + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +/* + * See "SHR, SVR Setting" in datasheet + */ +#define IMX274_DEFAULT_FRAME_LENGTH(4550) +#define IMX274_MAX_FRAME_LENGTH(0x000f) + +/* + * See "Frame Rate Adjustment" in datasheet + */ +#define IMX274_PIXCLK_CONST1 (7200) +#define IMX274_PIXCLK_CONST2 (100) + +/* + * The input gain is shifted by IMX274_GAIN_SHIFT to get + * decimal number. The real gain is + * (float)input_gain_value / (1 << IMX274_GAIN_SHIFT) + */ +#define IMX274_GAIN_SHIFT (8) +
[PATCH v5 1/2] media:imx274 device tree binding file
The binding file for imx274 CMOS sensor V4l2 driver Signed-off-by: Leon Luo --- v5: - add 'port' and 'endpoint' information v4: - no changes v3: - remove redundant properties and references - document 'reg' property v2: - no changes --- .../devicetree/bindings/media/i2c/imx274.txt | 33 ++ 1 file changed, 33 insertions(+) create mode 100644 Documentation/devicetree/bindings/media/i2c/imx274.txt diff --git a/Documentation/devicetree/bindings/media/i2c/imx274.txt b/Documentation/devicetree/bindings/media/i2c/imx274.txt new file mode 100644 index ..80f2e89568e1 --- /dev/null +++ b/Documentation/devicetree/bindings/media/i2c/imx274.txt @@ -0,0 +1,33 @@ +* Sony 1/2.5-Inch 8.51Mp CMOS Digital Image Sensor + +The Sony imx274 is a 1/2.5-inch CMOS active pixel digital image sensor with +an active array size of 3864H x 2202V. It is programmable through I2C +interface. The I2C address is fixed to 0x1a as per sensor data sheet. +Image data is sent through MIPI CSI-2, which is configured as 4 lanes +at 1440 Mbps. + + +Required Properties: +- compatible: value should be "sony,imx274" for imx274 sensor +- reg: I2C bus address of the device + +Optional Properties: +- reset-gpios: Sensor reset GPIO + +The imx274 device node should contain one 'port' child node with +an 'endpoint' subnode. For further reading on port node refer to +Documentation/devicetree/bindings/media/video-interfaces.txt. + +Example: + sensor@1a { + compatible = "sony,imx274"; + reg = <0x1a>; + #address-cells = <1>; + #size-cells = <0>; + reset-gpios = <&gpio_sensor 0 0>; + port { + sensor_out: endpoint { + remote-endpoint = <&csiss_in>; + }; + }; + }; -- 2.14.0.rc1
[PATCH v4 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 --- v4: - use 32-bit data type to avoid __divdi3 compile error for i386 - clean up OR together error codes 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 | 1808 3 files changed, 1816 insertions(+) create mode 100644 drivers/media/i2c/imx274.c diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig index 94153895fcd4..ad2e70a02363 100644 --- a/drivers/media/i2c/Kconfig +++ b/drivers/media/i2c/Kconfig @@ -547,6 +547,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 ..66cbfa81c030 --- /dev/null +++ b/drivers/media/i2c/imx274.c @@ -0,0 +1,1808 @@ +/* + * 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 + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +/* + * See "SHR, SVR Setting" in datasheet + */ +#define IMX274_DEFAULT_FRAME_LENGTH(4550) +#define IMX274_MAX_FRAME_LENGTH(0x000f) + +/* + * See "Frame Rate Adjustment" in datasheet + */ +#define IMX274_PIXCLK_CONST1 (7200) +#define IMX274_PIXCLK_CONST2 (100) + +/* + * The input gain is shifted by IMX274_GAIN_SHIFT to get + * decimal number. The real gain is + * (float)input_gain_value / (1 << IMX274_GAIN_SHIFT) + */ +#define IMX274_GAIN_SHIFT (8) +#define IMX274_GAIN
[PATCH v4 1/2] media:imx274 device tree binding file
The binding file for imx274 CMOS sensor V4l2 driver Signed-off-by: Leon Luo --- v4: - no changes v3: - remove redundant properties and references - document 'reg' property v2: - no changes --- .../devicetree/bindings/media/i2c/imx274.txt | 32 ++ 1 file changed, 32 insertions(+) create mode 100644 Documentation/devicetree/bindings/media/i2c/imx274.txt diff --git a/Documentation/devicetree/bindings/media/i2c/imx274.txt b/Documentation/devicetree/bindings/media/i2c/imx274.txt new file mode 100644 index ..1f03256b35db --- /dev/null +++ b/Documentation/devicetree/bindings/media/i2c/imx274.txt @@ -0,0 +1,32 @@ +* Sony 1/2.5-Inch 8.51Mp CMOS Digital Image Sensor + +The Sony imx274 is a 1/2.5-inch CMOS active pixel digital image sensor with +an active array size of 3864H x 2202V. It is programmable through I2C +interface. The I2C address is fixed to 0x1a as per sensor data sheet. +Image data is sent through MIPI CSI-2, which is configured as 4 lanes +at 1440 Mbps. + + +Required Properties: +- compatible: value should be "sony,imx274" for imx274 sensor +- reg: I2C bus address of the device + +Optional Properties: +- reset-gpios: Sensor reset GPIO + +For further reading on port node refer to +Documentation/devicetree/bindings/media/video-interfaces.txt. + +Example: + sensor@1a { + compatible = "sony,imx274"; + reg = <0x1a>; + #address-cells = <1>; + #size-cells = <0>; + reset-gpios = <&gpio_sensor 0 0>; + port { + sensor_out: endpoint { + remote-endpoint = <&csiss_in>; + }; + }; + }; -- 2.14.1.145.gb3622a4
[PATCH v3 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/disable -Test pattern: 12 test patterns Signed-off-by: Leon Luo Tested-by: Sören Brinkmann --- 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 | 1804 3 files changed, 1812 insertions(+) create mode 100644 drivers/media/i2c/imx274.c diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig index 121b3b5394cb..8bcee55d4021 100644 --- a/drivers/media/i2c/Kconfig +++ b/drivers/media/i2c/Kconfig @@ -535,6 +535,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 2c0868fa6034..6ec0206d02fe 100644 --- a/drivers/media/i2c/Makefile +++ b/drivers/media/i2c/Makefile @@ -89,5 +89,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 ..dbca9017f3e1 --- /dev/null +++ b/drivers/media/i2c/imx274.c @@ -0,0 +1,1804 @@ +/* + * 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 + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +/* + * See "SHR, SVR Setting" in datasheet + */ +#define IMX274_DEFAULT_FRAME_LENGTH(4550) +#define IMX274_MAX_FRAME_LENGTH(0x000f) + +/* + * See "Frame Rate Adjustment" in datasheet + */ +#define IMX274_PIXCLK_CONST1 (7200) +#define IMX274_PIXCLK_CONST2 (100) + +/* + * The input gain is shifted by IMX274_GAIN_SHIFT to get + * decimal number. The real gain is + * (float)input_gain_value / (1 << IMX274_GAIN_SHIFT) + */ +#define IMX274_GAIN_SHIFT (8) +#define IMX274_GAIN_SHIFT_MASK ((1 << IMX274_GAIN_SHIFT) - 1) + +/* + * See "Analog Gain" and "Digital Ga
[PATCH v3 1/2] media:imx274 device tree binding file
The binding file for imx274 CMOS sensor V4l2 driver Signed-off-by: Leon Luo Acked-by: Sören Brinkmann --- v3: - remove redundant properties and references - document 'reg' property v2: - no changes --- .../devicetree/bindings/media/i2c/imx274.txt | 32 ++ 1 file changed, 32 insertions(+) create mode 100644 Documentation/devicetree/bindings/media/i2c/imx274.txt diff --git a/Documentation/devicetree/bindings/media/i2c/imx274.txt b/Documentation/devicetree/bindings/media/i2c/imx274.txt new file mode 100644 index ..1f03256b35db --- /dev/null +++ b/Documentation/devicetree/bindings/media/i2c/imx274.txt @@ -0,0 +1,32 @@ +* Sony 1/2.5-Inch 8.51Mp CMOS Digital Image Sensor + +The Sony imx274 is a 1/2.5-inch CMOS active pixel digital image sensor with +an active array size of 3864H x 2202V. It is programmable through I2C +interface. The I2C address is fixed to 0x1a as per sensor data sheet. +Image data is sent through MIPI CSI-2, which is configured as 4 lanes +at 1440 Mbps. + + +Required Properties: +- compatible: value should be "sony,imx274" for imx274 sensor +- reg: I2C bus address of the device + +Optional Properties: +- reset-gpios: Sensor reset GPIO + +For further reading on port node refer to +Documentation/devicetree/bindings/media/video-interfaces.txt. + +Example: + sensor@1a { + compatible = "sony,imx274"; + reg = <0x1a>; + #address-cells = <1>; + #size-cells = <0>; + reset-gpios = <&gpio_sensor 0 0>; + port { + sensor_out: endpoint { + remote-endpoint = <&csiss_in>; + }; + }; + }; -- 2.14.0.rc1
[PATCH v3 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/disable -Test pattern: 12 test patterns Signed-off-by: Leon Luo Tested-by: Sören Brinkmann --- 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 | 1804 3 files changed, 1812 insertions(+) create mode 100644 drivers/media/i2c/imx274.c diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig index 121b3b5394cb..8bcee55d4021 100644 --- a/drivers/media/i2c/Kconfig +++ b/drivers/media/i2c/Kconfig @@ -535,6 +535,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 2c0868fa6034..6ec0206d02fe 100644 --- a/drivers/media/i2c/Makefile +++ b/drivers/media/i2c/Makefile @@ -89,5 +89,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 ..dbca9017f3e1 --- /dev/null +++ b/drivers/media/i2c/imx274.c @@ -0,0 +1,1804 @@ +/* + * 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 + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +/* + * See "SHR, SVR Setting" in datasheet + */ +#define IMX274_DEFAULT_FRAME_LENGTH(4550) +#define IMX274_MAX_FRAME_LENGTH(0x000f) + +/* + * See "Frame Rate Adjustment" in datasheet + */ +#define IMX274_PIXCLK_CONST1 (7200) +#define IMX274_PIXCLK_CONST2 (100) + +/* + * The input gain is shifted by IMX274_GAIN_SHIFT to get + * decimal number. The real gain is + * (float)input_gain_value / (1 << IMX274_GAIN_SHIFT) + */ +#define IMX274_GAIN_SHIFT (8) +#define IMX274_GAIN_SHIFT_MASK ((1 << IMX274_GAIN_SHIFT) - 1) + +/* + * See "Analog Gain" and "Digital Ga
[PATCH v3 1/2] media:imx274 device tree binding file
The binding file for imx274 CMOS sensor V4l2 driver Signed-off-by: Leon Luo Acked-by: Sören Brinkmann --- v3: - remove redundant properties and references - document 'reg' property v2: - no changes --- .../devicetree/bindings/media/i2c/imx274.txt | 32 ++ 1 file changed, 32 insertions(+) create mode 100644 Documentation/devicetree/bindings/media/i2c/imx274.txt diff --git a/Documentation/devicetree/bindings/media/i2c/imx274.txt b/Documentation/devicetree/bindings/media/i2c/imx274.txt new file mode 100644 index ..1f03256b35db --- /dev/null +++ b/Documentation/devicetree/bindings/media/i2c/imx274.txt @@ -0,0 +1,32 @@ +* Sony 1/2.5-Inch 8.51Mp CMOS Digital Image Sensor + +The Sony imx274 is a 1/2.5-inch CMOS active pixel digital image sensor with +an active array size of 3864H x 2202V. It is programmable through I2C +interface. The I2C address is fixed to 0x1a as per sensor data sheet. +Image data is sent through MIPI CSI-2, which is configured as 4 lanes +at 1440 Mbps. + + +Required Properties: +- compatible: value should be "sony,imx274" for imx274 sensor +- reg: I2C bus address of the device + +Optional Properties: +- reset-gpios: Sensor reset GPIO + +For further reading on port node refer to +Documentation/devicetree/bindings/media/video-interfaces.txt. + +Example: + sensor@1a { + compatible = "sony,imx274"; + reg = <0x1a>; + #address-cells = <1>; + #size-cells = <0>; + reset-gpios = <&gpio_sensor 0 0>; + port { + sensor_out: endpoint { + remote-endpoint = <&csiss_in>; + }; + }; + }; -- 2.14.0.rc1