Hello Akira

On Mon, 18 Apr 2011, Akira Tsukamoto wrote:

> Hello Guennadi,
> 
> > > Sorry for the sudden email but may I have your advice on soc_camera?
> 
> > You can have a look at another driver 
> > for a Sharp camera sensor:
> > 
> > drivers/media/video/rj54n1cb0c.c
> > 
> > and at its platform glue in arch/sh/boards/mach-kfr2r09/setup.c, there you 
> > find
> > 
> > struct platform_device kfr2r09_camera
> > 
> > which links to
> > 
> > struct soc_camera_link rj54n1_link
> 
> > > The ARM cpu is made by Renesas.
> > 
> > Then, perhaps, something similar to
> > 
> > arch/arm/mach-shmobile/board-ap4evb.c
> 
> Thank you for your suggestion, I was able to bind my driver
> with soc_camera(I believe...).
> 
> I attached my draft driver files at the end of this email
> for any suggestions.

Thanks for attaching your sources.

> In the beginning, I would like to explain the fundamental 
> information.
> 
> 1) 2 megapixel camera module is connected to 
>    the ARM board, Renesas ag5evm, through I2C.
>     arch/arm/mach-shmobile/board-ag5evm.c
> 2) The camera module is connected to CEU on the ag5evm.
> 3) I followed your instruction to bind the camera
>    sensor driver to soc_camera as attached and 
>    builds and boots fine.
> 4) I have not received the data sheet from the vender 
>    for the camera yet ;)
> 5) But I have the prototype board on my hand.
> 6) I can not implement the details of the driver without
>    the data sheet but would like to start implement the 
>    outline, so I could save my time while I am waiting 
>    for the data sheet.
> 
> Also,
> I would like to know, if I need to bind to 
>    sh_mobile_ceu_camera.c
> too, and how, because the camera is connected to CEU.

Yes, you do. Look at the board-ap4evb and board-mackerel files at 
everything, containing the "ceu" string in it. The former configures a 
serially connected camera sensor over the MIPI CSI-2 bus, the latter over 
the parallel interface.

I haven't reviewed your sources in detail, just two comments, regarding 
something, that caught my eye:

> (I never knew the word CEU until I started to work with
> this project...)
> 
> Thank you and best regards,
> 
> Akira

[snip]

> --- linux_kernel_bsp/arch/arm/mach-shmobile/board-ag5evm.c    2011-03-22 
> 12:30:14.000000000 +0900
> +++ linux_kernel/arch/arm/mach-shmobile/board-ag5evm.c        2011-04-18 
> 14:39:20.000000000 +0900
> @@ -59,6 +59,7 @@
>  
>  #include <sound/sh_fsi.h>
>  #include <video/sh_mobile_lcdc.h>
> +#include <media/soc_camera.h>
>  
>  static struct r8a66597_platdata usb_host_data = {
>       .on_chip        = 1,
> @@ -317,11 +318,38 @@ static struct platform_device fsi_device
>       },
>  };
>  
> +static struct i2c_board_info rj65na20_info = {
> +     I2C_BOARD_INFO("rj65na20", 0x40),
> +};
> +
> +struct soc_camera_link rj65na20_link = {
> +     .bus_id         = 0,
> +     .board_info     = &rj65na20_info,
> +     .i2c_adapter_id = 0,
> +     .module_name    = "rj65na20",
> +};
> +
> +static struct platform_device rj65na20_camera = {
> +     .name   = "soc-camera-pdrv-2M",

This name has to match with what's advertised in 
drivers/media/video/soc_camera.c, namely "soc-camera-pdrv"

> +     .id     = 0,
> +     .dev    = {
> +             .platform_data = &rj65na20_link,
> +     },
> +};
> +
>  static struct i2c_board_info i2c0_devices[] = {
>       {
>               I2C_BOARD_INFO("ag5evm_ts", 0x20),
>               .irq    = pint2irq(12), /* PINTC3 */
>       },
> +     /* 2M camera */
> +     {
> +             I2C_BOARD_INFO("rj65na20", 0x40),
> +     },

No, you do not have to include this here, the sensor must not be registered 
automatically during the board initialisation.

Thanks
Guennadi

>  };
>  
>  static struct i2c_board_info i2c1_devices[] = {
> @@ -548,6 +576,8 @@ static struct platform_device *ag5evm_de
>  
>       &usb_mass_storage_device,
>       &android_usb_device,
> +
> +     &rj65na20_camera,
>  };
>  
>  static struct map_desc ag5evm_io_desc[] __initdata = {
> @@ -748,6 +778,7 @@ static void __init ag5evm_init(void)
>       struct clk *sub_clk = clk_get(NULL, "sub_clk");
>       struct clk *extal2_clk = clk_get(NULL, "extal2");
>       struct clk *fsia_clk = clk_get(NULL, "fsia_clk");
> +     struct clk *vck1_clk = clk_get(NULL, "vck1_clk");
>       clk_set_parent(sub_clk, extal2_clk);
>  
>       __raw_writel(__raw_readl(SUBCKCR) & ~(1<<9), SUBCKCR);
> @@ -853,6 +884,43 @@ static void __init ag5evm_init(void)
>       __raw_writel(0x2a8b9111, DSI1PHYCR);
>       clk_enable(clk_get(NULL, "dsi-tx"));
> 
> +     /* 2M camera */
> +     gpio_request(GPIO_PORT44, NULL);
> +     gpio_direction_output(GPIO_PORT44, 0);
> +     udelay(10);
> +     gpio_set_value(GPIO_PORT44, 1);
> +
>       /* Unreset LCD Panel */
>       gpio_request(GPIO_PORT217, NULL);
>       gpio_direction_output(GPIO_PORT217, 0);
> 
> -- 
> Akira Tsukamoto
> 

---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to