Re: [PATCH v3 07/10] arm: omap4430sdp: Add support for omap4iss camera

2012-05-18 Thread Sergio Aguirre
Hi Sakari,

On Sun, May 13, 2012 at 7:24 PM, Sakari Ailus sakari.ai...@iki.fi wrote:
 Hi Sergio,

 On Thu, May 03, 2012 at 10:20:47PM -0500, Aguirre, Sergio wrote:
 Hi Sakari,

 On Thu, May 3, 2012 at 7:03 AM, Aguirre, Sergio saagui...@ti.com wrote:
  Hi Sakari,
 
  Thanks for reviewing.
 
  On Wed, May 2, 2012 at 2:47 PM, Sakari Ailus sakari.ai...@iki.fi wrote:
 
  Hi Sergio,
 
  Thanks for the patches!!
 
  On Wed, May 02, 2012 at 10:15:46AM -0500, Sergio Aguirre wrote:
  ...
  +static int sdp4430_ov_cam1_power(struct v4l2_subdev *subdev, int on)
  +{
  +     struct device *dev = subdev-v4l2_dev-dev;
  +     int ret;
  +
  +     if (on) {
  +             if (!regulator_is_enabled(sdp4430_cam2pwr_reg)) {
  +                     ret = regulator_enable(sdp4430_cam2pwr_reg);
  +                     if (ret) {
  +                             dev_err(dev,
  +                                     Error in enabling sensor power 
  regulator 'cam2pwr'\n);
  +                             return ret;
  +                     }
  +
  +                     msleep(50);
  +             }
  +
  +             gpio_set_value(OMAP4430SDP_GPIO_CAM_PDN_B, 1);
  +             msleep(10);
  +             ret = clk_enable(sdp4430_cam1_aux_clk); /* Enable XCLK */
  +             if (ret) {
  +                     dev_err(dev,
  +                             Error in clk_enable() in %s(%d)\n,
  +                             __func__, on);
  +                     gpio_set_value(OMAP4430SDP_GPIO_CAM_PDN_B, 0);
  +                     return ret;
  +             }
  +             msleep(10);
  +     } else {
  +             clk_disable(sdp4430_cam1_aux_clk);
  +             msleep(1);
  +             gpio_set_value(OMAP4430SDP_GPIO_CAM_PDN_B, 0);
  +             if (regulator_is_enabled(sdp4430_cam2pwr_reg)) {
  +                     ret = regulator_disable(sdp4430_cam2pwr_reg);
  +                     if (ret) {
  +                             dev_err(dev,
  +                                     Error in disabling sensor power 
  regulator 'cam2pwr'\n);
  +                             return ret;
  +                     }
  +             }
  +     }
  +
  +     return 0;
  +}
 
  Isn't this something that should be part of the sensor driver? There's
  nothing in the above code that would be board specific, except the names 
  of
  the clocks, regulators and GPIOs. The sensor driver could hold the names
  instead; this would be also compatible with the device tree.
 
  Agreed. I see what you mean...
 
  I'll take care of that.

 Can you please check out these patches?

 1. 
 http://gitorious.org/omap4-v4l2-camera/omap4-v4l2-camera/commit/cb6c10d58053180364461e6bc8d30d1ec87e6e22

 Ideally we should really get rid of the board code callbacks. What do you
 need to do there?

Well, in a OMAP44xx Blaze:

http://svtronics.com/products/27-blaze-mdp

The CSI2-A interface has 2 possible sensor inputs:

- Sony IMX060 12 MP
- OmniVision OV5650 5MP

Which are muxed with a High speed differential selector.

(Analog devices part: ADG936, found here:
http://www.analog.com/static/imported-files/data_sheets/ADG936_936R.pdf)

And to make it more fun, you switch that with a GPIO in an Audio IC (TWL6040) !

Quite a mess, but leaves me with few options, so that's why I need
that to be board
specific, and that by providing these function that can be used to
take care of such
creative designs :P

Have better ideas?


 2. 
 http://gitorious.org/omap4-v4l2-camera/omap4-v4l2-camera/commit/6732e0db25c6647b34ef8f01c244a49a1fd6b45d

 Isn't reset voltage level (high or low) a property of the sensor rather than
 the board?

 Well, I know sometimes the people who typically design the hardware can be
 quite inventive. ;)

Unfortunately, that's exactly the case!

Again, in this creative design in Blaze platform I mentioned above,
they also have a
level inverter just before the RESET pin in the sensor. So that makes
it active high, from
the GPIO driver point of view :/

Not sure if there's a better way of handling this...

Thanks for the comments!

Regards,
Sergio


 3. 
 http://gitorious.org/omap4-v4l2-camera/omap4-v4l2-camera/commit/d61c4e3142dc9cae972f9128fe73d986838c0ca1

 4. 
 http://gitorious.org/omap4-v4l2-camera/omap4-v4l2-camera/commit/e83f36001c7f7cbe184ad094d9b0c95c39e5028f

 Cheers,

 --
 Sakari Ailus
 e-mail: sakari.ai...@iki.fi     jabber/XMPP/Gmail: sai...@retiisi.org.uk
 --
 To unsubscribe from this list: send the line unsubscribe linux-media in
 the body of a message to majord...@vger.kernel.org
 More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3 07/10] arm: omap4430sdp: Add support for omap4iss camera

2012-05-13 Thread Sakari Ailus
Hi Sergio,

On Thu, May 03, 2012 at 10:20:47PM -0500, Aguirre, Sergio wrote:
 Hi Sakari,
 
 On Thu, May 3, 2012 at 7:03 AM, Aguirre, Sergio saagui...@ti.com wrote:
  Hi Sakari,
 
  Thanks for reviewing.
 
  On Wed, May 2, 2012 at 2:47 PM, Sakari Ailus sakari.ai...@iki.fi wrote:
 
  Hi Sergio,
 
  Thanks for the patches!!
 
  On Wed, May 02, 2012 at 10:15:46AM -0500, Sergio Aguirre wrote:
  ...
  +static int sdp4430_ov_cam1_power(struct v4l2_subdev *subdev, int on)
  +{
  +     struct device *dev = subdev-v4l2_dev-dev;
  +     int ret;
  +
  +     if (on) {
  +             if (!regulator_is_enabled(sdp4430_cam2pwr_reg)) {
  +                     ret = regulator_enable(sdp4430_cam2pwr_reg);
  +                     if (ret) {
  +                             dev_err(dev,
  +                                     Error in enabling sensor power 
  regulator 'cam2pwr'\n);
  +                             return ret;
  +                     }
  +
  +                     msleep(50);
  +             }
  +
  +             gpio_set_value(OMAP4430SDP_GPIO_CAM_PDN_B, 1);
  +             msleep(10);
  +             ret = clk_enable(sdp4430_cam1_aux_clk); /* Enable XCLK */
  +             if (ret) {
  +                     dev_err(dev,
  +                             Error in clk_enable() in %s(%d)\n,
  +                             __func__, on);
  +                     gpio_set_value(OMAP4430SDP_GPIO_CAM_PDN_B, 0);
  +                     return ret;
  +             }
  +             msleep(10);
  +     } else {
  +             clk_disable(sdp4430_cam1_aux_clk);
  +             msleep(1);
  +             gpio_set_value(OMAP4430SDP_GPIO_CAM_PDN_B, 0);
  +             if (regulator_is_enabled(sdp4430_cam2pwr_reg)) {
  +                     ret = regulator_disable(sdp4430_cam2pwr_reg);
  +                     if (ret) {
  +                             dev_err(dev,
  +                                     Error in disabling sensor power 
  regulator 'cam2pwr'\n);
  +                             return ret;
  +                     }
  +             }
  +     }
  +
  +     return 0;
  +}
 
  Isn't this something that should be part of the sensor driver? There's
  nothing in the above code that would be board specific, except the names of
  the clocks, regulators and GPIOs. The sensor driver could hold the names
  instead; this would be also compatible with the device tree.
 
  Agreed. I see what you mean...
 
  I'll take care of that.
 
 Can you please check out these patches?
 
 1. 
 http://gitorious.org/omap4-v4l2-camera/omap4-v4l2-camera/commit/cb6c10d58053180364461e6bc8d30d1ec87e6e22

Ideally we should really get rid of the board code callbacks. What do you
need to do there?

 2. 
 http://gitorious.org/omap4-v4l2-camera/omap4-v4l2-camera/commit/6732e0db25c6647b34ef8f01c244a49a1fd6b45d

Isn't reset voltage level (high or low) a property of the sensor rather than
the board?

Well, I know sometimes the people who typically design the hardware can be
quite inventive. ;)

 3. 
 http://gitorious.org/omap4-v4l2-camera/omap4-v4l2-camera/commit/d61c4e3142dc9cae972f9128fe73d986838c0ca1

 4. 
 http://gitorious.org/omap4-v4l2-camera/omap4-v4l2-camera/commit/e83f36001c7f7cbe184ad094d9b0c95c39e5028f

Cheers,

-- 
Sakari Ailus
e-mail: sakari.ai...@iki.fi jabber/XMPP/Gmail: sai...@retiisi.org.uk
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3 07/10] arm: omap4430sdp: Add support for omap4iss camera

2012-05-03 Thread Aguirre, Sergio
Hi Sakari,

Thanks for reviewing.

On Wed, May 2, 2012 at 2:47 PM, Sakari Ailus sakari.ai...@iki.fi wrote:

 Hi Sergio,

 Thanks for the patches!!

 On Wed, May 02, 2012 at 10:15:46AM -0500, Sergio Aguirre wrote:
 ...
 +static int sdp4430_ov_cam1_power(struct v4l2_subdev *subdev, int on)
 +{
 +     struct device *dev = subdev-v4l2_dev-dev;
 +     int ret;
 +
 +     if (on) {
 +             if (!regulator_is_enabled(sdp4430_cam2pwr_reg)) {
 +                     ret = regulator_enable(sdp4430_cam2pwr_reg);
 +                     if (ret) {
 +                             dev_err(dev,
 +                                     Error in enabling sensor power 
 regulator 'cam2pwr'\n);
 +                             return ret;
 +                     }
 +
 +                     msleep(50);
 +             }
 +
 +             gpio_set_value(OMAP4430SDP_GPIO_CAM_PDN_B, 1);
 +             msleep(10);
 +             ret = clk_enable(sdp4430_cam1_aux_clk); /* Enable XCLK */
 +             if (ret) {
 +                     dev_err(dev,
 +                             Error in clk_enable() in %s(%d)\n,
 +                             __func__, on);
 +                     gpio_set_value(OMAP4430SDP_GPIO_CAM_PDN_B, 0);
 +                     return ret;
 +             }
 +             msleep(10);
 +     } else {
 +             clk_disable(sdp4430_cam1_aux_clk);
 +             msleep(1);
 +             gpio_set_value(OMAP4430SDP_GPIO_CAM_PDN_B, 0);
 +             if (regulator_is_enabled(sdp4430_cam2pwr_reg)) {
 +                     ret = regulator_disable(sdp4430_cam2pwr_reg);
 +                     if (ret) {
 +                             dev_err(dev,
 +                                     Error in disabling sensor power 
 regulator 'cam2pwr'\n);
 +                             return ret;
 +                     }
 +             }
 +     }
 +
 +     return 0;
 +}

 Isn't this something that should be part of the sensor driver? There's
 nothing in the above code that would be board specific, except the names of
 the clocks, regulators and GPIOs. The sensor driver could hold the names
 instead; this would be also compatible with the device tree.

Agreed. I see what you mean...

I'll take care of that.


 It should be possible to have s_power() callback NULL, too.

 +static int sdp4430_ov_cam2_power(struct v4l2_subdev *subdev, int on)
 +{
 +     struct device *dev = subdev-v4l2_dev-dev;
 +     int ret;
 +
 +     if (on) {
 +             u8 gpoctl = 0;
 +
 +             ret = regulator_enable(sdp4430_cam2pwr_reg);
 +             if (ret) {
 +                     dev_err(dev,
 +                             Error in enabling sensor power regulator 
 'cam2pwr'\n);
 +                     return ret;
 +             }
 +
 +             msleep(50);
 +
 +             if (twl_i2c_read_u8(TWL_MODULE_AUDIO_VOICE, gpoctl,
 +                                 TWL6040_REG_GPOCTL))
 +                     return -ENODEV;
 +             if (twl_i2c_write_u8(TWL_MODULE_AUDIO_VOICE,
 +                                  gpoctl | TWL6040_GPO3,
 +                                  TWL6040_REG_GPOCTL))
 +                     return -ENODEV;

 The above piece of code looks quite interesting. What does it do?

Well, this is because the camera adapter board in 4430SDP has 3
sensors actually:

- 1 Sony IMX060 12.1 MP sensor
- 2 OmniVision OV5650 sensors

And there's 3 wideband analog switches, like this:

http://www.analog.com/static/imported-files/data_sheets/ADG936_936R.pdf

That basically select either IMX060 or OV5650 for CSI2A input.

So, this commands are because the TWL6040 chip has a GPO pin to toggle
this, instead
of an OMAP GPIO (Don't ask me why :) )

Anyways... I see your point, maybe this should be explained better
through a comment.

Regards,
Sergio

 Kind regards,

 --
 Sakari Ailus
 e-mail: sakari.ai...@iki.fi     jabber/XMPP/Gmail: sai...@retiisi.org.uk
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3 07/10] arm: omap4430sdp: Add support for omap4iss camera

2012-05-03 Thread Aguirre, Sergio
Hi Sakari,

On Thu, May 3, 2012 at 7:03 AM, Aguirre, Sergio saagui...@ti.com wrote:
 Hi Sakari,

 Thanks for reviewing.

 On Wed, May 2, 2012 at 2:47 PM, Sakari Ailus sakari.ai...@iki.fi wrote:

 Hi Sergio,

 Thanks for the patches!!

 On Wed, May 02, 2012 at 10:15:46AM -0500, Sergio Aguirre wrote:
 ...
 +static int sdp4430_ov_cam1_power(struct v4l2_subdev *subdev, int on)
 +{
 +     struct device *dev = subdev-v4l2_dev-dev;
 +     int ret;
 +
 +     if (on) {
 +             if (!regulator_is_enabled(sdp4430_cam2pwr_reg)) {
 +                     ret = regulator_enable(sdp4430_cam2pwr_reg);
 +                     if (ret) {
 +                             dev_err(dev,
 +                                     Error in enabling sensor power 
 regulator 'cam2pwr'\n);
 +                             return ret;
 +                     }
 +
 +                     msleep(50);
 +             }
 +
 +             gpio_set_value(OMAP4430SDP_GPIO_CAM_PDN_B, 1);
 +             msleep(10);
 +             ret = clk_enable(sdp4430_cam1_aux_clk); /* Enable XCLK */
 +             if (ret) {
 +                     dev_err(dev,
 +                             Error in clk_enable() in %s(%d)\n,
 +                             __func__, on);
 +                     gpio_set_value(OMAP4430SDP_GPIO_CAM_PDN_B, 0);
 +                     return ret;
 +             }
 +             msleep(10);
 +     } else {
 +             clk_disable(sdp4430_cam1_aux_clk);
 +             msleep(1);
 +             gpio_set_value(OMAP4430SDP_GPIO_CAM_PDN_B, 0);
 +             if (regulator_is_enabled(sdp4430_cam2pwr_reg)) {
 +                     ret = regulator_disable(sdp4430_cam2pwr_reg);
 +                     if (ret) {
 +                             dev_err(dev,
 +                                     Error in disabling sensor power 
 regulator 'cam2pwr'\n);
 +                             return ret;
 +                     }
 +             }
 +     }
 +
 +     return 0;
 +}

 Isn't this something that should be part of the sensor driver? There's
 nothing in the above code that would be board specific, except the names of
 the clocks, regulators and GPIOs. The sensor driver could hold the names
 instead; this would be also compatible with the device tree.

 Agreed. I see what you mean...

 I'll take care of that.

Can you please check out these patches?

1. 
http://gitorious.org/omap4-v4l2-camera/omap4-v4l2-camera/commit/cb6c10d58053180364461e6bc8d30d1ec87e6e22
2. 
http://gitorious.org/omap4-v4l2-camera/omap4-v4l2-camera/commit/6732e0db25c6647b34ef8f01c244a49a1fd6b45d
3. 
http://gitorious.org/omap4-v4l2-camera/omap4-v4l2-camera/commit/d61c4e3142dc9cae972f9128fe73d986838c0ca1
4. 
http://gitorious.org/omap4-v4l2-camera/omap4-v4l2-camera/commit/e83f36001c7f7cbe184ad094d9b0c95c39e5028f

I want to see if I got your point properly...

Regards,
Sergio



 It should be possible to have s_power() callback NULL, too.

 +static int sdp4430_ov_cam2_power(struct v4l2_subdev *subdev, int on)
 +{
 +     struct device *dev = subdev-v4l2_dev-dev;
 +     int ret;
 +
 +     if (on) {
 +             u8 gpoctl = 0;
 +
 +             ret = regulator_enable(sdp4430_cam2pwr_reg);
 +             if (ret) {
 +                     dev_err(dev,
 +                             Error in enabling sensor power regulator 
 'cam2pwr'\n);
 +                     return ret;
 +             }
 +
 +             msleep(50);
 +
 +             if (twl_i2c_read_u8(TWL_MODULE_AUDIO_VOICE, gpoctl,
 +                                 TWL6040_REG_GPOCTL))
 +                     return -ENODEV;
 +             if (twl_i2c_write_u8(TWL_MODULE_AUDIO_VOICE,
 +                                  gpoctl | TWL6040_GPO3,
 +                                  TWL6040_REG_GPOCTL))
 +                     return -ENODEV;

 The above piece of code looks quite interesting. What does it do?

 Well, this is because the camera adapter board in 4430SDP has 3
 sensors actually:

 - 1 Sony IMX060 12.1 MP sensor
 - 2 OmniVision OV5650 sensors

 And there's 3 wideband analog switches, like this:

 http://www.analog.com/static/imported-files/data_sheets/ADG936_936R.pdf

 That basically select either IMX060 or OV5650 for CSI2A input.

 So, this commands are because the TWL6040 chip has a GPO pin to toggle
 this, instead
 of an OMAP GPIO (Don't ask me why :) )

 Anyways... I see your point, maybe this should be explained better
 through a comment.

 Regards,
 Sergio

 Kind regards,

 --
 Sakari Ailus
 e-mail: sakari.ai...@iki.fi     jabber/XMPP/Gmail: sai...@retiisi.org.uk
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v3 07/10] arm: omap4430sdp: Add support for omap4iss camera

2012-05-02 Thread Sergio Aguirre
This adds support for camera interface with the support for
following sensors:

- OV5640
- OV5650

Signed-off-by: Sergio Aguirre saagui...@ti.com
---
 arch/arm/mach-omap2/Kconfig|   16 +
 arch/arm/mach-omap2/Makefile   |2 +
 arch/arm/mach-omap2/board-4430sdp-camera.c |  415 
 arch/arm/mach-omap2/board-4430sdp.c|   20 ++
 4 files changed, 453 insertions(+), 0 deletions(-)
 create mode 100644 arch/arm/mach-omap2/board-4430sdp-camera.c

diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
index 8141b76..54645aa 100644
--- a/arch/arm/mach-omap2/Kconfig
+++ b/arch/arm/mach-omap2/Kconfig
@@ -335,6 +335,22 @@ config MACH_OMAP_4430SDP
select OMAP_PACKAGE_CBS
select REGULATOR_FIXED_VOLTAGE if REGULATOR
 
+config MACH_OMAP_4430SDP_CAMERA_SUPPORT
+   bool OMAP 4430 SDP board Camera support
+   depends on MACH_OMAP_4430SDP
+   select MEDIA_SUPPORT
+   select MEDIA_CONTROLLER
+   select VIDEO_DEV
+   select VIDEO_V4L2_SUBDEV_API
+   select V4L_PLATFORM_DRIVERS
+   select VIDEO_OMAP4
+   select VIDEO_OV5640
+   select VIDEO_OV5650
+   help
+ Enable Camera HW support for OMAP 4430 SDP board
+ This is for using the OMAP4 ISS CSI2A Camera sensor
+ interface.
+
 config MACH_OMAP4_PANDA
bool OMAP4 Panda Board
default y
diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
index 49f92bc..ebd8f63 100644
--- a/arch/arm/mach-omap2/Makefile
+++ b/arch/arm/mach-omap2/Makefile
@@ -239,6 +239,8 @@ obj-$(CONFIG_MACH_TI8148EVM)+= 
board-ti8168evm.o
 
 # Platform specific device init code
 
+obj-$(CONFIG_MACH_OMAP_4430SDP_CAMERA_SUPPORT) += board-4430sdp-camera.o
+
 omap-flash-$(CONFIG_MTD_NAND_OMAP2):= board-flash.o
 omap-flash-$(CONFIG_MTD_ONENAND_OMAP2) := board-flash.o
 obj-y  += $(omap-flash-y) $(omap-flash-m)
diff --git a/arch/arm/mach-omap2/board-4430sdp-camera.c 
b/arch/arm/mach-omap2/board-4430sdp-camera.c
new file mode 100644
index 000..9a8881f
--- /dev/null
+++ b/arch/arm/mach-omap2/board-4430sdp-camera.c
@@ -0,0 +1,415 @@
+#include linux/gpio.h
+#include linux/clk.h
+#include linux/delay.h
+#include linux/i2c/twl.h
+#include linux/mfd/twl6040.h
+#include linux/regulator/consumer.h
+
+#include plat/i2c.h
+#include plat/omap-pm.h
+
+#include asm/mach-types.h
+
+#include media/ov5640.h
+#include media/ov5650.h
+
+#include devices.h
+#include ../../../drivers/media/video/omap4iss/iss.h
+
+#include control.h
+#include mux.h
+
+#define OMAP4430SDP_GPIO_CAM_PDN_B 38
+#define OMAP4430SDP_GPIO_CAM_PDN_C 39
+
+static struct clk *sdp4430_cam1_aux_clk;
+static struct clk *sdp4430_cam2_aux_clk;
+static struct regulator *sdp4430_cam2pwr_reg;
+
+static int sdp4430_ov_cam1_power(struct v4l2_subdev *subdev, int on)
+{
+   struct device *dev = subdev-v4l2_dev-dev;
+   int ret;
+
+   if (on) {
+   if (!regulator_is_enabled(sdp4430_cam2pwr_reg)) {
+   ret = regulator_enable(sdp4430_cam2pwr_reg);
+   if (ret) {
+   dev_err(dev,
+   Error in enabling sensor power 
regulator 'cam2pwr'\n);
+   return ret;
+   }
+
+   msleep(50);
+   }
+
+   gpio_set_value(OMAP4430SDP_GPIO_CAM_PDN_B, 1);
+   msleep(10);
+   ret = clk_enable(sdp4430_cam1_aux_clk); /* Enable XCLK */
+   if (ret) {
+   dev_err(dev,
+   Error in clk_enable() in %s(%d)\n,
+   __func__, on);
+   gpio_set_value(OMAP4430SDP_GPIO_CAM_PDN_B, 0);
+   return ret;
+   }
+   msleep(10);
+   } else {
+   clk_disable(sdp4430_cam1_aux_clk);
+   msleep(1);
+   gpio_set_value(OMAP4430SDP_GPIO_CAM_PDN_B, 0);
+   if (regulator_is_enabled(sdp4430_cam2pwr_reg)) {
+   ret = regulator_disable(sdp4430_cam2pwr_reg);
+   if (ret) {
+   dev_err(dev,
+   Error in disabling sensor power 
regulator 'cam2pwr'\n);
+   return ret;
+   }
+   }
+   }
+
+   return 0;
+}
+
+static int sdp4430_ov_cam2_power(struct v4l2_subdev *subdev, int on)
+{
+   struct device *dev = subdev-v4l2_dev-dev;
+   int ret;
+
+   if (on) {
+   u8 gpoctl = 0;
+
+   ret = regulator_enable(sdp4430_cam2pwr_reg);
+   if (ret) {
+   dev_err(dev,
+   Error in enabling sensor power regulator 
'cam2pwr'\n);
+   return ret;
+   }
+
+   

Re: [PATCH v3 07/10] arm: omap4430sdp: Add support for omap4iss camera

2012-05-02 Thread Sakari Ailus

Hi Sergio,

Thanks for the patches!!

On Wed, May 02, 2012 at 10:15:46AM -0500, Sergio Aguirre wrote:
...
 +static int sdp4430_ov_cam1_power(struct v4l2_subdev *subdev, int on)
 +{
 + struct device *dev = subdev-v4l2_dev-dev;
 + int ret;
 +
 + if (on) {
 + if (!regulator_is_enabled(sdp4430_cam2pwr_reg)) {
 + ret = regulator_enable(sdp4430_cam2pwr_reg);
 + if (ret) {
 + dev_err(dev,
 + Error in enabling sensor power 
 regulator 'cam2pwr'\n);
 + return ret;
 + }
 +
 + msleep(50);
 + }
 +
 + gpio_set_value(OMAP4430SDP_GPIO_CAM_PDN_B, 1);
 + msleep(10);
 + ret = clk_enable(sdp4430_cam1_aux_clk); /* Enable XCLK */
 + if (ret) {
 + dev_err(dev,
 + Error in clk_enable() in %s(%d)\n,
 + __func__, on);
 + gpio_set_value(OMAP4430SDP_GPIO_CAM_PDN_B, 0);
 + return ret;
 + }
 + msleep(10);
 + } else {
 + clk_disable(sdp4430_cam1_aux_clk);
 + msleep(1);
 + gpio_set_value(OMAP4430SDP_GPIO_CAM_PDN_B, 0);
 + if (regulator_is_enabled(sdp4430_cam2pwr_reg)) {
 + ret = regulator_disable(sdp4430_cam2pwr_reg);
 + if (ret) {
 + dev_err(dev,
 + Error in disabling sensor power 
 regulator 'cam2pwr'\n);
 + return ret;
 + }
 + }
 + }
 +
 + return 0;
 +}

Isn't this something that should be part of the sensor driver? There's
nothing in the above code that would be board specific, except the names of
the clocks, regulators and GPIOs. The sensor driver could hold the names
instead; this would be also compatible with the device tree.

It should be possible to have s_power() callback NULL, too.

 +static int sdp4430_ov_cam2_power(struct v4l2_subdev *subdev, int on)
 +{
 + struct device *dev = subdev-v4l2_dev-dev;
 + int ret;
 +
 + if (on) {
 + u8 gpoctl = 0;
 +
 + ret = regulator_enable(sdp4430_cam2pwr_reg);
 + if (ret) {
 + dev_err(dev,
 + Error in enabling sensor power regulator 
 'cam2pwr'\n);
 + return ret;
 + }
 +
 + msleep(50);
 +
 + if (twl_i2c_read_u8(TWL_MODULE_AUDIO_VOICE, gpoctl,
 + TWL6040_REG_GPOCTL))
 + return -ENODEV;
 + if (twl_i2c_write_u8(TWL_MODULE_AUDIO_VOICE,
 +  gpoctl | TWL6040_GPO3,
 +  TWL6040_REG_GPOCTL))
 + return -ENODEV;

The above piece of code looks quite interesting. What does it do?

Kind regards,

-- 
Sakari Ailus
e-mail: sakari.ai...@iki.fi jabber/XMPP/Gmail: sai...@retiisi.org.uk
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html