forked from Minki/linux
ARM: shmobile: armadillo800eva: enable camera
This patch enable camera support on CON1 Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Tested-by: Simon Horman <horms@verge.net.au> Acked-by: Magnus Damm <damm@opensource.se> Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
This commit is contained in:
parent
910c14d0b8
commit
3760e79450
arch/arm
@ -86,6 +86,16 @@ CONFIG_SERIAL_SH_SCI_CONSOLE=y
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_SH_MOBILE=y
|
||||
# CONFIG_HWMON is not set
|
||||
CONFIG_MEDIA_SUPPORT=y
|
||||
CONFIG_VIDEO_DEV=y
|
||||
# CONFIG_RC_CORE is not set
|
||||
# CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set
|
||||
# CONFIG_V4L_USB_DRIVERS is not set
|
||||
CONFIG_V4L_PLATFORM_DRIVERS=y
|
||||
CONFIG_SOC_CAMERA=y
|
||||
CONFIG_SOC_CAMERA_MT9T112=y
|
||||
CONFIG_VIDEO_SH_MOBILE_CEU=y
|
||||
# CONFIG_RADIO_ADAPTERS is not set
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_SH_MOBILE_LCDC=y
|
||||
CONFIG_FB_SH_MOBILE_HDMI=y
|
||||
|
@ -37,13 +37,16 @@
|
||||
#include <linux/mmc/sh_mobile_sdhi.h>
|
||||
#include <mach/common.h>
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/r8a7740.h>
|
||||
#include <media/mt9t112.h>
|
||||
#include <media/sh_mobile_ceu.h>
|
||||
#include <media/soc_camera.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/mach/time.h>
|
||||
#include <asm/hardware/cache-l2x0.h>
|
||||
#include <mach/r8a7740.h>
|
||||
#include <video/sh_mobile_lcdc.h>
|
||||
#include <video/sh_mobile_hdmi.h>
|
||||
|
||||
@ -630,6 +633,87 @@ static struct platform_device sh_mmcif_device = {
|
||||
.resource = sh_mmcif_resources,
|
||||
};
|
||||
|
||||
/* Camera */
|
||||
static int mt9t111_power(struct device *dev, int mode)
|
||||
{
|
||||
struct clk *mclk = clk_get(NULL, "video1");
|
||||
|
||||
if (IS_ERR(mclk)) {
|
||||
dev_err(dev, "can't get video1 clock\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (mode) {
|
||||
/* video1 (= CON1 camera) expect 24MHz */
|
||||
clk_set_rate(mclk, clk_round_rate(mclk, 24000000));
|
||||
clk_enable(mclk);
|
||||
gpio_direction_output(GPIO_PORT158, 1);
|
||||
} else {
|
||||
gpio_direction_output(GPIO_PORT158, 0);
|
||||
clk_disable(mclk);
|
||||
}
|
||||
|
||||
clk_put(mclk);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct i2c_board_info i2c_camera_mt9t111 = {
|
||||
I2C_BOARD_INFO("mt9t112", 0x3d),
|
||||
};
|
||||
|
||||
static struct mt9t112_camera_info mt9t111_info = {
|
||||
.divider = { 16, 0, 0, 7, 0, 10, 14, 7, 7 },
|
||||
};
|
||||
|
||||
static struct soc_camera_link mt9t111_link = {
|
||||
.i2c_adapter_id = 0,
|
||||
.bus_id = 0,
|
||||
.board_info = &i2c_camera_mt9t111,
|
||||
.power = mt9t111_power,
|
||||
.priv = &mt9t111_info,
|
||||
};
|
||||
|
||||
static struct platform_device camera_device = {
|
||||
.name = "soc-camera-pdrv",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &mt9t111_link,
|
||||
},
|
||||
};
|
||||
|
||||
/* CEU0 */
|
||||
static struct sh_mobile_ceu_info sh_mobile_ceu0_info = {
|
||||
.flags = SH_CEU_FLAG_LOWER_8BIT,
|
||||
};
|
||||
|
||||
static struct resource ceu0_resources[] = {
|
||||
[0] = {
|
||||
.name = "CEU",
|
||||
.start = 0xfe910000,
|
||||
.end = 0xfe91009f,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = intcs_evt2irq(0x0500),
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
[2] = {
|
||||
/* place holder for contiguous memory */
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device ceu0_device = {
|
||||
.name = "sh_mobile_ceu",
|
||||
.id = 0,
|
||||
.num_resources = ARRAY_SIZE(ceu0_resources),
|
||||
.resource = ceu0_resources,
|
||||
.dev = {
|
||||
.platform_data = &sh_mobile_ceu0_info,
|
||||
.coherent_dma_mask = 0xffffffff,
|
||||
},
|
||||
};
|
||||
|
||||
/* I2C */
|
||||
static struct i2c_board_info i2c0_devices[] = {
|
||||
{
|
||||
@ -649,6 +733,8 @@ static struct platform_device *eva_devices[] __initdata = {
|
||||
&sh_mmcif_device,
|
||||
&hdmi_device,
|
||||
&hdmi_lcdc_device,
|
||||
&camera_device,
|
||||
&ceu0_device,
|
||||
};
|
||||
|
||||
static void __init eva_clock_init(void)
|
||||
@ -807,6 +893,29 @@ static void __init eva_init(void)
|
||||
gpio_request(GPIO_FN_MMC1_D6_PORT143, NULL);
|
||||
gpio_request(GPIO_FN_MMC1_D7_PORT142, NULL);
|
||||
|
||||
/* CEU0 */
|
||||
gpio_request(GPIO_FN_VIO0_D7, NULL);
|
||||
gpio_request(GPIO_FN_VIO0_D6, NULL);
|
||||
gpio_request(GPIO_FN_VIO0_D5, NULL);
|
||||
gpio_request(GPIO_FN_VIO0_D4, NULL);
|
||||
gpio_request(GPIO_FN_VIO0_D3, NULL);
|
||||
gpio_request(GPIO_FN_VIO0_D2, NULL);
|
||||
gpio_request(GPIO_FN_VIO0_D1, NULL);
|
||||
gpio_request(GPIO_FN_VIO0_D0, NULL);
|
||||
gpio_request(GPIO_FN_VIO0_CLK, NULL);
|
||||
gpio_request(GPIO_FN_VIO0_HD, NULL);
|
||||
gpio_request(GPIO_FN_VIO0_VD, NULL);
|
||||
gpio_request(GPIO_FN_VIO0_FIELD, NULL);
|
||||
gpio_request(GPIO_FN_VIO_CKO, NULL);
|
||||
|
||||
/* CON1/CON15 Camera */
|
||||
gpio_request(GPIO_PORT173, NULL); /* STANDBY */
|
||||
gpio_request(GPIO_PORT172, NULL); /* RST */
|
||||
gpio_request(GPIO_PORT158, NULL); /* CAM_PON */
|
||||
gpio_direction_output(GPIO_PORT173, 0);
|
||||
gpio_direction_output(GPIO_PORT172, 1);
|
||||
gpio_direction_output(GPIO_PORT158, 0); /* see mt9t111_power() */
|
||||
|
||||
/*
|
||||
* CAUTION
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user