Hello Guennadi, *1* > I haven't reviewed your sources in detail, just two comments, regarding > something, that caught my eye: > > +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" *2* > > static struct i2c_board_info i2c0_devices[] = { > > { > > I2C_BOARD_INFO("ag5evm_ts", 0x20), > > .irq = pint2irq(12), /* PINTC3 */ > > }, > > + /* 2M camera */ > > + { > > + I2C_BOARD_INFO("rj65na20", 0x40), > > + }, I fixed the both above, thank you. And add CEU init in it. This is my current patch for temporary start. (builds without error at least) With kind regards, Akira --- 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-19 16:54:47.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", + .id = 0, + .dev = { + .platform_data = &rj65na20_link, + }, +}; + static struct i2c_board_info i2c0_devices[] = { { I2C_BOARD_INFO("ag5evm_ts", 0x20), .irq = pint2irq(12), /* PINTC3 */ }, }; 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,56 @@ static void __init ag5evm_init(void) __raw_writel(0x2a8b9111, DSI1PHYCR); clk_enable(clk_get(NULL, "dsi-tx")); + /* CEU */ + gpio_request(GPIO_FN_VIO2_CLK2, NULL); + gpio_request(GPIO_FN_VIO2_VD3, NULL); + gpio_request(GPIO_FN_VIO2_HD3, NULL); + gpio_request(GPIO_FN_PORT16_VIO_CKOR, NULL); + gpio_request(GPIO_FN_VIO_D15, NULL); + gpio_request(GPIO_FN_VIO_D14, NULL); + gpio_request(GPIO_FN_VIO_D13, NULL); + gpio_request(GPIO_FN_VIO_D12, NULL); + gpio_request(GPIO_FN_VIO_D11, NULL); + gpio_request(GPIO_FN_VIO_D10, NULL); + gpio_request(GPIO_FN_VIO_D9, NULL); + gpio_request(GPIO_FN_VIO_D8, NULL); + + if (!IS_ERR(vck1_clk)) { + clk_set_rate(vck1_clk, clk_round_rate(vck1_clk, 24000000)); + clk_enable(vck1_clk); + clk_put(vck1_clk); + udelay(50); + } else { + printk(KERN_ERR "clk_get(vck1_clk) failed.\n"); + } + + /* 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 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html