From: Igor Grinberg <grinberg@compulab.co.il>
To: Javier Martin <javier.martin@vista-silicon.com>
Cc: linux-media@vger.kernel.org, beagleboard@googlegroups.com,
carlighting@yahoo.co.nz, g.liakhovetski@gmx.de,
linux-arm-kernel@lists.infradead.org,
laurent.pinchart@ideasonboard.com,
"linux-omap@vger.kernel.org" <linux-omap@vger.kernel.org>
Subject: Re: [PATCH v2 2/2] OMAP3BEAGLE: Add support for mt9p031 sensor driver.
Date: Sun, 22 May 2011 16:49:31 +0300 [thread overview]
Message-ID: <4DD9146B.2050408@compulab.co.il> (raw)
In-Reply-To: <1305899272-31839-2-git-send-email-javier.martin@vista-silicon.com>
Hi Javier,
linux-omap should be CC'ed - added.
In addition to Koen's comments, some comments below.
On 05/20/11 16:47, Javier Martin wrote:
> isp.h file has to be included as a temporal measure
> since clocks of the isp are not exposed yet.
>
> Signed-off-by: Javier Martin <javier.martin@vista-silicon.com>
> ---
> arch/arm/mach-omap2/board-omap3beagle.c | 127 ++++++++++++++++++++++++++++++-
> 1 files changed, 123 insertions(+), 4 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
> index 33007fd..f52e6ae 100644
> --- a/arch/arm/mach-omap2/board-omap3beagle.c
> +++ b/arch/arm/mach-omap2/board-omap3beagle.c
> @@ -24,15 +24,20 @@
> #include <linux/input.h>
> #include <linux/gpio_keys.h>
> #include <linux/opp.h>
> +#include <linux/i2c.h>
> +#include <linux/mm.h>
> +#include <linux/videodev2.h>
>
> #include <linux/mtd/mtd.h>
> #include <linux/mtd/partitions.h>
> #include <linux/mtd/nand.h>
> #include <linux/mmc/host.h>
> -
> +#include <linux/gpio.h>
Why include this for second time?
> #include <linux/regulator/machine.h>
> #include <linux/i2c/twl.h>
>
> +#include <media/mt9p031.h>
> +
> #include <mach/hardware.h>
> #include <asm/mach-types.h>
> #include <asm/mach/arch.h>
> @@ -47,12 +52,17 @@
> #include <plat/nand.h>
> #include <plat/usb.h>
> #include <plat/omap_device.h>
> +#include <plat/i2c.h>
>
> #include "mux.h"
> #include "hsmmc.h"
> #include "timer-gp.h"
> #include "pm.h"
> +#include "devices.h"
> +#include "../../../drivers/media/video/omap3isp/isp.h"
>
> +#define MT9P031_RESET_GPIO 98
> +#define MT9P031_XCLK ISP_XCLK_A
> #define NAND_BLOCK_SIZE SZ_128K
>
> /*
> @@ -273,6 +283,44 @@ static struct regulator_consumer_supply beagle_vsim_supply = {
>
> static struct gpio_led gpio_leds[];
>
> +static struct regulator_consumer_supply beagle_vaux3_supply = {
> + .supply = "cam_1v8",
> +};
> +
> +static struct regulator_consumer_supply beagle_vaux4_supply = {
> + .supply = "cam_2v8",
> +};
> +
> +/* VAUX3 for CAM_1V8 */
> +static struct regulator_init_data beagle_vaux3 = {
> + .constraints = {
> + .min_uV = 1800000,
> + .max_uV = 1800000,
> + .apply_uV = true,
> + .valid_modes_mask = REGULATOR_MODE_NORMAL
> + | REGULATOR_MODE_STANDBY,
> + .valid_ops_mask = REGULATOR_CHANGE_MODE
> + | REGULATOR_CHANGE_STATUS,
> + },
> + .num_consumer_supplies = 1,
> + .consumer_supplies = &beagle_vaux3_supply,
> +};
> +
> +/* VAUX4 for CAM_2V8 */
> +static struct regulator_init_data beagle_vaux4 = {
> + .constraints = {
> + .min_uV = 1800000,
> + .max_uV = 1800000,
> + .apply_uV = true,
> + .valid_modes_mask = REGULATOR_MODE_NORMAL
> + | REGULATOR_MODE_STANDBY,
> + .valid_ops_mask = REGULATOR_CHANGE_MODE
> + | REGULATOR_CHANGE_STATUS,
> + },
> + .num_consumer_supplies = 1,
> + .consumer_supplies = &beagle_vaux4_supply,
> +};
> +
> static int beagle_twl_gpio_setup(struct device *dev,
> unsigned gpio, unsigned ngpio)
> {
> @@ -309,6 +357,15 @@ static int beagle_twl_gpio_setup(struct device *dev,
> pr_err("%s: unable to configure EHCI_nOC\n", __func__);
> }
>
> + if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
> + /*
> + * Power on camera interface - only on pre-production, not
> + * needed on production boards
> + */
> + gpio_request(gpio + 2, "CAM_EN");
> + gpio_direction_output(gpio + 2, 1);
Why not gpio_request_one()?
> + }
> +
> /*
> * TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, XM active
> * high / others active low)
> @@ -451,6 +508,8 @@ static struct twl4030_platform_data beagle_twldata = {
> .vsim = &beagle_vsim,
> .vdac = &beagle_vdac,
> .vpll2 = &beagle_vpll2,
> + .vaux3 = &beagle_vaux3,
> + .vaux4 = &beagle_vaux4,
> };
>
> static struct i2c_board_info __initdata beagle_i2c_boardinfo[] = {
> @@ -463,15 +522,16 @@ static struct i2c_board_info __initdata beagle_i2c_boardinfo[] = {
> };
>
> static struct i2c_board_info __initdata beagle_i2c_eeprom[] = {
> - {
> - I2C_BOARD_INFO("eeprom", 0x50),
> - },
> + {
> + I2C_BOARD_INFO("eeprom", 0x50),
> + },
> };
This part of the hunk is not related to the patch
and should be in a separate (cleanup) patch.
>
> static int __init omap3_beagle_i2c_init(void)
> {
> omap_register_i2c_bus(1, 2600, beagle_i2c_boardinfo,
> ARRAY_SIZE(beagle_i2c_boardinfo));
> + omap_register_i2c_bus(2, 100, NULL, 0); /* Enable I2C2 for camera */
> /* Bus 3 is attached to the DVI port where devices like the pico DLP
> * projector don't work reliably with 400kHz */
> omap_register_i2c_bus(3, 100, beagle_i2c_eeprom, ARRAY_SIZE(beagle_i2c_eeprom));
> @@ -654,6 +714,60 @@ static void __init beagle_opp_init(void)
> return;
> }
>
> +static int beagle_cam_set_xclk(struct v4l2_subdev *subdev, int hz)
> +{
> + struct isp_device *isp = v4l2_dev_to_isp_device(subdev->v4l2_dev);
> + int ret;
> +
> + ret = isp->platform_cb.set_xclk(isp, hz, MT9P031_XCLK);
> + return 0;
> +}
Why do you need ret variable here, if you always return zero?
> +
> +static int beagle_cam_reset(struct v4l2_subdev *subdev, int active)
> +{
> + /* Set RESET_BAR to !active */
> + gpio_set_value(MT9P031_RESET_GPIO, !active);
> +
> + return 0;
> +}
> +
> +static struct mt9p031_platform_data beagle_mt9p031_platform_data = {
> + .set_xclk = beagle_cam_set_xclk,
> + .reset = beagle_cam_reset,
> +};
> +
> +static struct i2c_board_info mt9p031_camera_i2c_device = {
> + I2C_BOARD_INFO("mt9p031", 0x48),
> + .platform_data = &beagle_mt9p031_platform_data,
> +};
> +
> +static struct isp_subdev_i2c_board_info mt9p031_camera_subdevs[] = {
> + {
> + .board_info = &mt9p031_camera_i2c_device,
> + .i2c_adapter_id = 2,
> + },
> + { NULL, 0, },
> +};
> +
> +static struct isp_v4l2_subdevs_group beagle_camera_subdevs[] = {
> + {
> + .subdevs = mt9p031_camera_subdevs,
> + .interface = ISP_INTERFACE_PARALLEL,
> + .bus = {
> + .parallel = {
> + .data_lane_shift = 0,
> + .clk_pol = 1,
> + .bridge = ISPCTRL_PAR_BRIDGE_DISABLE,
> + }
> + },
> + },
> + { },
> +};
> +
> +static struct isp_platform_data beagle_isp_platform_data = {
> + .subdevs = beagle_camera_subdevs,
> +};
> +
> static void __init omap3_beagle_init(void)
> {
> omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
> @@ -679,6 +793,11 @@ static void __init omap3_beagle_init(void)
>
> beagle_display_init();
> beagle_opp_init();
> +
> + /* Enable camera */
> + gpio_request(MT9P031_RESET_GPIO, "cam_rst");
> + gpio_direction_output(MT9P031_RESET_GPIO, 0);
gpio_request_one()?
> + omap3_init_camera(&beagle_isp_platform_data);
> }
>
> MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board")
--
Regards,
Igor.
WARNING: multiple messages have this Message-ID (diff)
From: grinberg@compulab.co.il (Igor Grinberg)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 2/2] OMAP3BEAGLE: Add support for mt9p031 sensor driver.
Date: Sun, 22 May 2011 16:49:31 +0300 [thread overview]
Message-ID: <4DD9146B.2050408@compulab.co.il> (raw)
In-Reply-To: <1305899272-31839-2-git-send-email-javier.martin@vista-silicon.com>
Hi Javier,
linux-omap should be CC'ed - added.
In addition to Koen's comments, some comments below.
On 05/20/11 16:47, Javier Martin wrote:
> isp.h file has to be included as a temporal measure
> since clocks of the isp are not exposed yet.
>
> Signed-off-by: Javier Martin <javier.martin@vista-silicon.com>
> ---
> arch/arm/mach-omap2/board-omap3beagle.c | 127 ++++++++++++++++++++++++++++++-
> 1 files changed, 123 insertions(+), 4 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
> index 33007fd..f52e6ae 100644
> --- a/arch/arm/mach-omap2/board-omap3beagle.c
> +++ b/arch/arm/mach-omap2/board-omap3beagle.c
> @@ -24,15 +24,20 @@
> #include <linux/input.h>
> #include <linux/gpio_keys.h>
> #include <linux/opp.h>
> +#include <linux/i2c.h>
> +#include <linux/mm.h>
> +#include <linux/videodev2.h>
>
> #include <linux/mtd/mtd.h>
> #include <linux/mtd/partitions.h>
> #include <linux/mtd/nand.h>
> #include <linux/mmc/host.h>
> -
> +#include <linux/gpio.h>
Why include this for second time?
> #include <linux/regulator/machine.h>
> #include <linux/i2c/twl.h>
>
> +#include <media/mt9p031.h>
> +
> #include <mach/hardware.h>
> #include <asm/mach-types.h>
> #include <asm/mach/arch.h>
> @@ -47,12 +52,17 @@
> #include <plat/nand.h>
> #include <plat/usb.h>
> #include <plat/omap_device.h>
> +#include <plat/i2c.h>
>
> #include "mux.h"
> #include "hsmmc.h"
> #include "timer-gp.h"
> #include "pm.h"
> +#include "devices.h"
> +#include "../../../drivers/media/video/omap3isp/isp.h"
>
> +#define MT9P031_RESET_GPIO 98
> +#define MT9P031_XCLK ISP_XCLK_A
> #define NAND_BLOCK_SIZE SZ_128K
>
> /*
> @@ -273,6 +283,44 @@ static struct regulator_consumer_supply beagle_vsim_supply = {
>
> static struct gpio_led gpio_leds[];
>
> +static struct regulator_consumer_supply beagle_vaux3_supply = {
> + .supply = "cam_1v8",
> +};
> +
> +static struct regulator_consumer_supply beagle_vaux4_supply = {
> + .supply = "cam_2v8",
> +};
> +
> +/* VAUX3 for CAM_1V8 */
> +static struct regulator_init_data beagle_vaux3 = {
> + .constraints = {
> + .min_uV = 1800000,
> + .max_uV = 1800000,
> + .apply_uV = true,
> + .valid_modes_mask = REGULATOR_MODE_NORMAL
> + | REGULATOR_MODE_STANDBY,
> + .valid_ops_mask = REGULATOR_CHANGE_MODE
> + | REGULATOR_CHANGE_STATUS,
> + },
> + .num_consumer_supplies = 1,
> + .consumer_supplies = &beagle_vaux3_supply,
> +};
> +
> +/* VAUX4 for CAM_2V8 */
> +static struct regulator_init_data beagle_vaux4 = {
> + .constraints = {
> + .min_uV = 1800000,
> + .max_uV = 1800000,
> + .apply_uV = true,
> + .valid_modes_mask = REGULATOR_MODE_NORMAL
> + | REGULATOR_MODE_STANDBY,
> + .valid_ops_mask = REGULATOR_CHANGE_MODE
> + | REGULATOR_CHANGE_STATUS,
> + },
> + .num_consumer_supplies = 1,
> + .consumer_supplies = &beagle_vaux4_supply,
> +};
> +
> static int beagle_twl_gpio_setup(struct device *dev,
> unsigned gpio, unsigned ngpio)
> {
> @@ -309,6 +357,15 @@ static int beagle_twl_gpio_setup(struct device *dev,
> pr_err("%s: unable to configure EHCI_nOC\n", __func__);
> }
>
> + if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
> + /*
> + * Power on camera interface - only on pre-production, not
> + * needed on production boards
> + */
> + gpio_request(gpio + 2, "CAM_EN");
> + gpio_direction_output(gpio + 2, 1);
Why not gpio_request_one()?
> + }
> +
> /*
> * TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, XM active
> * high / others active low)
> @@ -451,6 +508,8 @@ static struct twl4030_platform_data beagle_twldata = {
> .vsim = &beagle_vsim,
> .vdac = &beagle_vdac,
> .vpll2 = &beagle_vpll2,
> + .vaux3 = &beagle_vaux3,
> + .vaux4 = &beagle_vaux4,
> };
>
> static struct i2c_board_info __initdata beagle_i2c_boardinfo[] = {
> @@ -463,15 +522,16 @@ static struct i2c_board_info __initdata beagle_i2c_boardinfo[] = {
> };
>
> static struct i2c_board_info __initdata beagle_i2c_eeprom[] = {
> - {
> - I2C_BOARD_INFO("eeprom", 0x50),
> - },
> + {
> + I2C_BOARD_INFO("eeprom", 0x50),
> + },
> };
This part of the hunk is not related to the patch
and should be in a separate (cleanup) patch.
>
> static int __init omap3_beagle_i2c_init(void)
> {
> omap_register_i2c_bus(1, 2600, beagle_i2c_boardinfo,
> ARRAY_SIZE(beagle_i2c_boardinfo));
> + omap_register_i2c_bus(2, 100, NULL, 0); /* Enable I2C2 for camera */
> /* Bus 3 is attached to the DVI port where devices like the pico DLP
> * projector don't work reliably with 400kHz */
> omap_register_i2c_bus(3, 100, beagle_i2c_eeprom, ARRAY_SIZE(beagle_i2c_eeprom));
> @@ -654,6 +714,60 @@ static void __init beagle_opp_init(void)
> return;
> }
>
> +static int beagle_cam_set_xclk(struct v4l2_subdev *subdev, int hz)
> +{
> + struct isp_device *isp = v4l2_dev_to_isp_device(subdev->v4l2_dev);
> + int ret;
> +
> + ret = isp->platform_cb.set_xclk(isp, hz, MT9P031_XCLK);
> + return 0;
> +}
Why do you need ret variable here, if you always return zero?
> +
> +static int beagle_cam_reset(struct v4l2_subdev *subdev, int active)
> +{
> + /* Set RESET_BAR to !active */
> + gpio_set_value(MT9P031_RESET_GPIO, !active);
> +
> + return 0;
> +}
> +
> +static struct mt9p031_platform_data beagle_mt9p031_platform_data = {
> + .set_xclk = beagle_cam_set_xclk,
> + .reset = beagle_cam_reset,
> +};
> +
> +static struct i2c_board_info mt9p031_camera_i2c_device = {
> + I2C_BOARD_INFO("mt9p031", 0x48),
> + .platform_data = &beagle_mt9p031_platform_data,
> +};
> +
> +static struct isp_subdev_i2c_board_info mt9p031_camera_subdevs[] = {
> + {
> + .board_info = &mt9p031_camera_i2c_device,
> + .i2c_adapter_id = 2,
> + },
> + { NULL, 0, },
> +};
> +
> +static struct isp_v4l2_subdevs_group beagle_camera_subdevs[] = {
> + {
> + .subdevs = mt9p031_camera_subdevs,
> + .interface = ISP_INTERFACE_PARALLEL,
> + .bus = {
> + .parallel = {
> + .data_lane_shift = 0,
> + .clk_pol = 1,
> + .bridge = ISPCTRL_PAR_BRIDGE_DISABLE,
> + }
> + },
> + },
> + { },
> +};
> +
> +static struct isp_platform_data beagle_isp_platform_data = {
> + .subdevs = beagle_camera_subdevs,
> +};
> +
> static void __init omap3_beagle_init(void)
> {
> omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
> @@ -679,6 +793,11 @@ static void __init omap3_beagle_init(void)
>
> beagle_display_init();
> beagle_opp_init();
> +
> + /* Enable camera */
> + gpio_request(MT9P031_RESET_GPIO, "cam_rst");
> + gpio_direction_output(MT9P031_RESET_GPIO, 0);
gpio_request_one()?
> + omap3_init_camera(&beagle_isp_platform_data);
> }
>
> MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board")
--
Regards,
Igor.
next prev parent reply other threads:[~2011-05-22 13:49 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-20 13:47 [PATCH v2 1/2] MT9P031: Add support for Aptina mt9p031 sensor Javier Martin
2011-05-20 13:47 ` Javier Martin
2011-05-20 13:47 ` [PATCH v2 2/2] OMAP3BEAGLE: Add support for mt9p031 sensor driver Javier Martin
2011-05-20 13:47 ` Javier Martin
2011-05-20 15:57 ` [beagleboard] " Koen Kooi
2011-05-20 15:57 ` Koen Kooi
2011-05-23 7:01 ` javier Martin
2011-05-23 7:01 ` javier Martin
2011-05-23 8:00 ` Laurent Pinchart
2011-05-23 8:00 ` Laurent Pinchart
2011-05-23 8:55 ` Koen Kooi
2011-05-23 8:55 ` Koen Kooi
2011-05-23 9:14 ` Laurent Pinchart
2011-05-23 9:14 ` Laurent Pinchart
2011-05-22 13:49 ` Igor Grinberg [this message]
2011-05-22 13:49 ` Igor Grinberg
2011-05-23 7:25 ` javier Martin
2011-05-23 7:25 ` javier Martin
2011-05-23 7:25 ` javier Martin
2011-05-23 7:47 ` Laurent Pinchart
2011-05-23 7:47 ` Laurent Pinchart
2011-05-23 17:03 ` Igor Grinberg
2011-05-23 17:03 ` Igor Grinberg
2011-05-21 12:55 ` [PATCH v2 1/2] MT9P031: Add support for Aptina mt9p031 sensor Mauro Carvalho Chehab
2011-05-21 12:55 ` Mauro Carvalho Chehab
2011-05-22 20:41 ` Laurent Pinchart
2011-05-22 20:41 ` Laurent Pinchart
2011-05-21 15:29 ` Guennadi Liakhovetski
2011-05-21 15:29 ` Guennadi Liakhovetski
2011-05-23 8:20 ` javier Martin
2011-05-23 8:20 ` javier Martin
2011-05-23 8:48 ` Guennadi Liakhovetski
2011-05-23 8:48 ` Guennadi Liakhovetski
2011-05-23 9:08 ` Laurent Pinchart
2011-05-23 9:08 ` Laurent Pinchart
2011-05-23 9:03 ` Laurent Pinchart
2011-05-23 9:03 ` Laurent Pinchart
2011-05-23 9:26 ` Guennadi Liakhovetski
2011-05-23 9:26 ` Guennadi Liakhovetski
2011-05-24 8:31 ` javier Martin
2011-05-24 8:31 ` javier Martin
2011-05-24 8:39 ` Laurent Pinchart
2011-05-24 8:39 ` Laurent Pinchart
2011-05-24 8:56 ` javier Martin
2011-05-24 8:56 ` javier Martin
2011-05-24 8:58 ` Laurent Pinchart
2011-05-24 8:58 ` Laurent Pinchart
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4DD9146B.2050408@compulab.co.il \
--to=grinberg@compulab.co.il \
--cc=beagleboard@googlegroups.com \
--cc=carlighting@yahoo.co.nz \
--cc=g.liakhovetski@gmx.de \
--cc=javier.martin@vista-silicon.com \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.