Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c77ef898 authored by Olof Johansson's avatar Olof Johansson
Browse files

Merge branch 'next/board-samsung' of...

Merge branch 'next/board-samsung' of git://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung into next/boards

* 'next/board-samsung' of git://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung: (32 commits)
  ARM: EXYNOS: support Exynos4210-bus Devfreq driver on Nuri board
  ARM: EXYNOS: Register JPEG on nuri
  ARM: EXYNOS: Register JPEG on universal_c210
  ARM: S5PV210: Enable JPEG on SMDKV210
  ARM: S5PV210: Add JPEG board definition
  ARM: EXYNOS: Enable JPEG on Origen
  ARM: EXYNOS: Enable JPEG on SMDKV310
  ARM: EXYNOS: Add __init attribute to universal_camera_init()
  ARM: EXYNOS: Add __init attribute to nuri_camera_init()
  ARM: S5PV210: Enable FIMC on SMDKC110
  ARM: S5PV210: Enable FIMC on SMDKV210
  ARM: S5PV210: Enable MFC on SMDKC110
  ARM: S5PV210: Enable MFC on SMDKV210
  ARM: EXYNOS: Enable G2D on SMDKV310
  ARM: S3C64XX: Supply platform data for SPI on Cragganmore
  ARM: S3C64XX: Add some more Cragganmore module IDs to the table
  ARM: EXYNOS: Add missing FIMC media device to Origen
  ARM: EXYNOS: Add missing FIMC media device to SMDKV310
  ARM: S5PV210: Add missing FIMC media device to Aquila
  ARM: SAMSUNG: Add support for S5K6AAFX camera on Nuri board
  ...
parents c454f813 bae82bdf
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -183,7 +183,9 @@ config MACH_SMDKV310
	select S5P_DEV_FIMC1
	select S5P_DEV_FIMC2
	select S5P_DEV_FIMC3
	select S5P_DEV_G2D
	select S5P_DEV_I2C_HDMIPHY
	select S5P_DEV_JPEG
	select S5P_DEV_MFC
	select S5P_DEV_TV
	select S5P_DEV_USB_EHCI
@@ -230,7 +232,9 @@ config MACH_UNIVERSAL_C210
	select S5P_DEV_FIMC1
	select S5P_DEV_FIMC2
	select S5P_DEV_FIMC3
	select S5P_DEV_G2D
	select S5P_DEV_CSIS0
	select S5P_DEV_JPEG
	select S5P_DEV_FIMD0
	select S3C_DEV_HSMMC
	select S3C_DEV_HSMMC2
@@ -268,11 +272,14 @@ config MACH_NURI
	select S3C_DEV_I2C1
	select S3C_DEV_I2C3
	select S3C_DEV_I2C5
	select S3C_DEV_I2C6
	select S5P_DEV_CSIS0
	select S5P_DEV_JPEG
	select S5P_DEV_FIMC0
	select S5P_DEV_FIMC1
	select S5P_DEV_FIMC2
	select S5P_DEV_FIMC3
	select S5P_DEV_G2D
	select S5P_DEV_MFC
	select S5P_DEV_USB_EHCI
	select S5P_SETUP_MIPIPHY
@@ -283,6 +290,7 @@ config MACH_NURI
	select EXYNOS4_SETUP_I2C1
	select EXYNOS4_SETUP_I2C3
	select EXYNOS4_SETUP_I2C5
	select EXYNOS4_SETUP_I2C6
	select EXYNOS4_SETUP_SDHCI
	select EXYNOS4_SETUP_USB_PHY
	select S5P_SETUP_MIPIPHY
@@ -303,7 +311,9 @@ config MACH_ORIGEN
	select S5P_DEV_FIMC2
	select S5P_DEV_FIMC3
	select S5P_DEV_FIMD0
	select S5P_DEV_G2D
	select S5P_DEV_I2C_HDMIPHY
	select S5P_DEV_JPEG
	select S5P_DEV_MFC
	select S5P_DEV_TV
	select S5P_DEV_USB_EHCI
+76 −4
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@

#include <video/platform_lcd.h>
#include <media/m5mols.h>
#include <media/s5k6aa.h>
#include <media/s5p_fimc.h>
#include <media/v4l2-mediabus.h>

@@ -75,6 +76,7 @@ enum fixed_regulator_id {
	FIXED_REG_ID_MAX8903,
	FIXED_REG_ID_CAM_A28V,
	FIXED_REG_ID_CAM_12V,
	FIXED_REG_ID_CAM_VT_15V,
};

static struct s3c2410_uartcfg nuri_uartcfgs[] __initdata = {
@@ -399,6 +401,9 @@ static struct regulator_consumer_supply __initdata max8997_ldo4_[] = {
static struct regulator_consumer_supply __initdata max8997_ldo5_[] = {
	REGULATOR_SUPPLY("vhsic", "modemctl"), /* MODEM */
};
static struct regulator_consumer_supply nuri_max8997_ldo6_consumer[] = {
	REGULATOR_SUPPLY("vdd_reg", "6-003c"), /* S5K6AA camera */
};
static struct regulator_consumer_supply __initdata max8997_ldo7_[] = {
	REGULATOR_SUPPLY("dig_18", "0-001f"), /* HCD803 */
};
@@ -431,7 +436,7 @@ static struct regulator_consumer_supply __initdata max8997_buck1_[] = {
	REGULATOR_SUPPLY("vdd_arm", NULL), /* CPUFREQ */
};
static struct regulator_consumer_supply __initdata max8997_buck2_[] = {
	REGULATOR_SUPPLY("vdd_int", NULL), /* CPUFREQ */
	REGULATOR_SUPPLY("vdd_int", "exynos4210-busfreq.0"), /* CPUFREQ */
};
static struct regulator_consumer_supply __initdata max8997_buck3_[] = {
	REGULATOR_SUPPLY("vdd", "mali_dev.0"), /* G3D of Exynos 4 */
@@ -546,6 +551,8 @@ static struct regulator_init_data __initdata max8997_ldo6_data = {
			.enabled	= 1,
		},
	},
	.num_consumer_supplies	= ARRAY_SIZE(nuri_max8997_ldo6_consumer),
	.consumer_supplies	= nuri_max8997_ldo6_consumer,
};

static struct regulator_init_data __initdata max8997_ldo7_data = {
@@ -742,7 +749,7 @@ static struct regulator_init_data __initdata max8997_buck2_data = {
	.constraints	= {
		.name		= "VINT_1.1V_C210",
		.min_uV		= 900000,
		.max_uV		= 1100000,
		.max_uV		= 1200000,
		.valid_ops_mask	= REGULATOR_CHANGE_VOLTAGE,
		.always_on	= 1,
		.state_mem	= {
@@ -957,7 +964,6 @@ static struct max8997_platform_data __initdata nuri_max8997_pdata = {
	.regulators		= nuri_max8997_regulators,

	.buck125_gpios = { EXYNOS4_GPX0(5), EXYNOS4_GPX0(6), EXYNOS4_GPL0(0) },
	.buck2_gpiodvs = true,

	.buck1_voltage[0] = 1350000, /* 1.35V */
	.buck1_voltage[1] = 1300000, /* 1.3V */
@@ -1116,7 +1122,30 @@ static void __init nuri_ehci_init(void)
}

/* CAMERA */
static struct regulator_consumer_supply cam_vt_cam15_supply =
	REGULATOR_SUPPLY("vdd_core", "6-003c");

static struct regulator_init_data cam_vt_cam15_reg_init_data = {
	.constraints = { .valid_ops_mask = REGULATOR_CHANGE_STATUS },
	.num_consumer_supplies = 1,
	.consumer_supplies = &cam_vt_cam15_supply,
};

static struct fixed_voltage_config cam_vt_cam15_fixed_voltage_cfg = {
	.supply_name	= "VT_CAM_1.5V",
	.microvolts	= 1500000,
	.gpio		= EXYNOS4_GPE2(2), /* VT_CAM_1.5V_EN */
	.enable_high	= 1,
	.init_data	= &cam_vt_cam15_reg_init_data,
};

static struct platform_device cam_vt_cam15_fixed_rdev = {
	.name = "reg-fixed-voltage", .id = FIXED_REG_ID_CAM_VT_15V,
	.dev = { .platform_data	= &cam_vt_cam15_fixed_voltage_cfg },
};

static struct regulator_consumer_supply cam_vdda_supply[] = {
	REGULATOR_SUPPLY("vdda", "6-003c"),
	REGULATOR_SUPPLY("a_sensor", "0-001f"),
};

@@ -1173,6 +1202,21 @@ static struct s5p_platform_mipi_csis mipi_csis_platdata = {

#define GPIO_CAM_MEGA_RST	EXYNOS4_GPY3(7) /* ISP_RESET */
#define GPIO_CAM_8M_ISP_INT	EXYNOS4_GPL2(5)
#define GPIO_CAM_VT_NSTBY	EXYNOS4_GPL2(0)
#define GPIO_CAM_VT_NRST	EXYNOS4_GPL2(1)

static struct s5k6aa_platform_data s5k6aa_pldata = {
	.mclk_frequency	= 24000000UL,
	.gpio_reset	= { GPIO_CAM_VT_NRST, 0 },
	.gpio_stby	= { GPIO_CAM_VT_NSTBY, 0 },
	.bus_type	= V4L2_MBUS_PARALLEL,
	.horiz_flip	= 1,
};

static struct i2c_board_info s5k6aa_board_info = {
	I2C_BOARD_INFO("S5K6AA", 0x3c),
	.platform_data = &s5k6aa_pldata,
};

static struct m5mols_platform_data m5mols_platdata = {
	.gpio_reset = GPIO_CAM_MEGA_RST,
@@ -1185,6 +1229,13 @@ static struct i2c_board_info m5mols_board_info = {

static struct s5p_fimc_isp_info nuri_camera_sensors[] = {
	{
		.flags		= V4L2_MBUS_PCLK_SAMPLE_RISING |
				  V4L2_MBUS_VSYNC_ACTIVE_LOW,
		.bus_type	= FIMC_ITU_601,
		.board_info	= &s5k6aa_board_info,
		.clk_frequency	= 24000000UL,
		.i2c_bus_num	= 6,
	}, {
		.flags		= V4L2_MBUS_PCLK_SAMPLE_FALLING |
				  V4L2_MBUS_VSYNC_ACTIVE_LOW,
		.bus_type	= FIMC_MIPI_CSI2,
@@ -1200,11 +1251,13 @@ static struct s5p_platform_fimc fimc_md_platdata = {
};

static struct gpio nuri_camera_gpios[] = {
	{ GPIO_CAM_VT_NSTBY,	GPIOF_OUT_INIT_LOW, "CAM_VGA_NSTBY" },
	{ GPIO_CAM_VT_NRST,	GPIOF_OUT_INIT_LOW, "CAM_VGA_NRST"  },
	{ GPIO_CAM_8M_ISP_INT,	GPIOF_IN,           "8M_ISP_INT"  },
	{ GPIO_CAM_MEGA_RST,	GPIOF_OUT_INIT_LOW, "CAM_8M_NRST" },
};

static void nuri_camera_init(void)
static void __init nuri_camera_init(void)
{
	s3c_set_platdata(&mipi_csis_platdata, sizeof(mipi_csis_platdata),
			 &s5p_device_mipi_csis0);
@@ -1224,6 +1277,8 @@ static void nuri_camera_init(void)
		pr_err("%s: Failed to configure 8M_ISP_INT GPIO\n", __func__);

	/* Free GPIOs controlled directly by the sensor drivers. */
	gpio_free(GPIO_CAM_VT_NRST);
	gpio_free(GPIO_CAM_VT_NSTBY);
	gpio_free(GPIO_CAM_MEGA_RST);

	if (exynos4_fimc_setup_gpio(S5P_CAMPORT_A)) {
@@ -1234,15 +1289,27 @@ static void nuri_camera_init(void)
	s5p_gpio_set_drvstr(EXYNOS4_GPJ1(3), S5P_GPIO_DRVSTR_LV4);
}

static struct s3c2410_platform_i2c nuri_i2c6_platdata __initdata = {
	.frequency	= 400000U,
	.sda_delay	= 200,
	.bus_num	= 6,
};

static struct s3c2410_platform_i2c nuri_i2c0_platdata __initdata = {
	.frequency	= 400000U,
	.sda_delay	= 200,
};

/* DEVFREQ controlling memory/bus */
static struct platform_device exynos4_bus_devfreq = {
	.name			= "exynos4210-busfreq",
};

static struct platform_device *nuri_devices[] __initdata = {
	/* Samsung Platform Devices */
	&s3c_device_i2c5, /* PMIC should initialize first */
	&s3c_device_i2c0,
	&s3c_device_i2c6,
	&emmc_fixed_voltage,
	&s5p_device_mipi_csis0,
	&s5p_device_fimc0,
@@ -1259,6 +1326,8 @@ static struct platform_device *nuri_devices[] __initdata = {
	&s3c_device_i2c3,
	&i2c9_gpio,
	&s3c_device_adc,
	&s5p_device_g2d,
	&s5p_device_jpeg,
	&s3c_device_rtc,
	&s5p_device_mfc,
	&s5p_device_mfc_l,
@@ -1274,8 +1343,10 @@ static struct platform_device *nuri_devices[] __initdata = {
	&nuri_backlight_device,
	&max8903_fixed_reg_dev,
	&nuri_max8903_device,
	&cam_vt_cam15_fixed_rdev,
	&cam_vdda_fixed_rdev,
	&cam_8m_12v_fixed_rdev,
	&exynos4_bus_devfreq,
};

static void __init nuri_map_io(void)
@@ -1305,6 +1376,7 @@ static void __init nuri_machine_init(void)
	i2c_register_board_info(5, i2c5_devs, ARRAY_SIZE(i2c5_devs));
	i2c9_devs[I2C9_MAX17042].irq = gpio_to_irq(EXYNOS4_GPX2(3));
	i2c_register_board_info(9, i2c9_devs, ARRAY_SIZE(i2c9_devs));
	s3c_i2c6_set_platdata(&nuri_i2c6_platdata);

	s5p_fimd0_set_platdata(&nuri_fb_pdata);

+37 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include <linux/regulator/machine.h>
#include <linux/mfd/max8997.h>
#include <linux/lcd.h>
#include <linux/rfkill-gpio.h>

#include <asm/mach/arch.h>
#include <asm/hardware/gic.h>
@@ -235,6 +236,7 @@ static struct regulator_init_data __initdata max8997_ldo9_data = {
		.min_uV		= 2800000,
		.max_uV		= 2800000,
		.apply_uV	= 1,
		.always_on	= 1,
		.valid_ops_mask	= REGULATOR_CHANGE_STATUS,
		.state_mem	= {
			.disabled	= 1,
@@ -278,6 +280,7 @@ static struct regulator_init_data __initdata max8997_ldo14_data = {
		.min_uV		= 1800000,
		.max_uV		= 1800000,
		.apply_uV	= 1,
		.always_on	= 1,
		.valid_ops_mask	= REGULATOR_CHANGE_STATUS,
		.state_mem	= {
			.disabled	= 1,
@@ -293,6 +296,7 @@ static struct regulator_init_data __initdata max8997_ldo17_data = {
		.min_uV		= 3300000,
		.max_uV		= 3300000,
		.apply_uV	= 1,
		.always_on	= 1,
		.valid_ops_mask	= REGULATOR_CHANGE_STATUS,
		.state_mem	= {
			.disabled	= 1,
@@ -602,6 +606,23 @@ static struct s3c_fb_platdata origen_lcd_pdata __initdata = {
	.setup_gpio	= exynos4_fimd0_gpio_setup_24bpp,
};

/* Bluetooth rfkill gpio platform data */
struct rfkill_gpio_platform_data origen_bt_pdata = {
	.reset_gpio	= EXYNOS4_GPX2(2),
	.shutdown_gpio	= -1,
	.type		= RFKILL_TYPE_BLUETOOTH,
	.name		= "origen-bt",
};

/* Bluetooth Platform device */
static struct platform_device origen_device_bluetooth = {
	.name		= "rfkill_gpio",
	.id		= -1,
	.dev		= {
		.platform_data	= &origen_bt_pdata,
	},
};

static struct platform_device *origen_devices[] __initdata = {
	&s3c_device_hsmmc2,
	&s3c_device_hsmmc0,
@@ -613,9 +634,12 @@ static struct platform_device *origen_devices[] __initdata = {
	&s5p_device_fimc1,
	&s5p_device_fimc2,
	&s5p_device_fimc3,
	&s5p_device_fimc_md,
	&s5p_device_fimd0,
	&s5p_device_g2d,
	&s5p_device_hdmi,
	&s5p_device_i2c_hdmiphy,
	&s5p_device_jpeg,
	&s5p_device_mfc,
	&s5p_device_mfc_l,
	&s5p_device_mfc_r,
@@ -630,6 +654,7 @@ static struct platform_device *origen_devices[] __initdata = {
	&exynos4_device_pd[PD_MFC],
	&origen_device_gpiokeys,
	&origen_lcd_hv070wsa,
	&origen_device_bluetooth,
};

/* LCD Backlight data */
@@ -643,6 +668,16 @@ static struct platform_pwm_backlight_data origen_bl_data = {
	.pwm_period_ns	= 1000,
};

static void __init origen_bt_setup(void)
{
	gpio_request(EXYNOS4_GPA0(0), "GPIO BT_UART");
	/* 4 UART Pins configuration */
	s3c_gpio_cfgrange_nopull(EXYNOS4_GPA0(0), 4, S3C_GPIO_SFN(2));
	/* Setup BT Reset, this gpio will be requesed by rfkill-gpio */
	s3c_gpio_cfgpin(EXYNOS4_GPX2(2), S3C_GPIO_OUTPUT);
	s3c_gpio_setpull(EXYNOS4_GPX2(2), S3C_GPIO_PULL_NONE);
}

static void s5p_tv_setup(void)
{
	/* Direct HPD to HDMI chip */
@@ -703,6 +738,8 @@ static void __init origen_machine_init(void)
	s5p_device_mfc.dev.parent = &exynos4_device_pd[PD_MFC].dev;

	samsung_bl_set(&origen_bl_gpio_info, &origen_bl_data);

	origen_bt_setup();
}

MACHINE_START(ORIGEN, "ORIGEN")
+3 −0
Original line number Diff line number Diff line
@@ -270,6 +270,9 @@ static struct platform_device *smdkv310_devices[] __initdata = {
	&s5p_device_fimc1,
	&s5p_device_fimc2,
	&s5p_device_fimc3,
	&s5p_device_fimc_md,
	&s5p_device_g2d,
	&s5p_device_jpeg,
	&exynos4_device_ac97,
	&exynos4_device_i2s0,
	&exynos4_device_ohci,
+75 −5
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@
#include <media/v4l2-mediabus.h>
#include <media/s5p_fimc.h>
#include <media/m5mols.h>
#include <media/s5k6aa.h>

#include "common.h"

@@ -122,8 +123,10 @@ static struct regulator_consumer_supply lp3974_buck1_consumer =
static struct regulator_consumer_supply lp3974_buck2_consumer =
	REGULATOR_SUPPLY("vddg3d", NULL);

static struct regulator_consumer_supply lp3974_buck3_consumer =
	REGULATOR_SUPPLY("vdet", "s5p-sdo");
static struct regulator_consumer_supply lp3974_buck3_consumer[] = {
	REGULATOR_SUPPLY("vdet", "s5p-sdo"),
	REGULATOR_SUPPLY("vdd_reg", "0-003c"),
};

static struct regulator_init_data lp3974_buck1_data = {
	.constraints	= {
@@ -168,8 +171,8 @@ static struct regulator_init_data lp3974_buck3_data = {
			.enabled	= 1,
		},
	},
	.num_consumer_supplies = 1,
	.consumer_supplies = &lp3974_buck3_consumer,
	.num_consumer_supplies = ARRAY_SIZE(lp3974_buck3_consumer),
	.consumer_supplies = lp3974_buck3_consumer,
};

static struct regulator_init_data lp3974_buck4_data = {
@@ -302,6 +305,9 @@ static struct regulator_init_data lp3974_ldo8_data = {
	.consumer_supplies = lp3974_ldo8_consumer,
};

static struct regulator_consumer_supply lp3974_ldo9_consumer =
	REGULATOR_SUPPLY("vddio", "0-003c");

static struct regulator_init_data lp3974_ldo9_data = {
	.constraints	= {
		.name		= "VCC_2.8V",
@@ -313,6 +319,8 @@ static struct regulator_init_data lp3974_ldo9_data = {
			.enabled	= 1,
		},
	},
	.num_consumer_supplies	= 1,
	.consumer_supplies	= &lp3974_ldo9_consumer,
};

static struct regulator_init_data lp3974_ldo10_data = {
@@ -411,6 +419,7 @@ static struct regulator_init_data lp3974_ldo15_data = {
};

static struct regulator_consumer_supply lp3974_ldo16_consumer[] = {
	REGULATOR_SUPPLY("vdda", "0-003c"),
	REGULATOR_SUPPLY("a_sensor", "0-001f"),
};

@@ -817,6 +826,8 @@ static struct s3c_fb_pd_win universal_fb_win0 = {
	},
	.max_bpp	= 32,
	.default_bpp	= 16,
	.virtual_x	= 480,
	.virtual_y	= 2 * 800,
};

static struct s3c_fb_platdata universal_lcd_pdata __initdata = {
@@ -828,6 +839,28 @@ static struct s3c_fb_platdata universal_lcd_pdata __initdata = {
	.setup_gpio	= exynos4_fimd0_gpio_setup_24bpp,
};

static struct regulator_consumer_supply cam_vt_dio_supply =
	REGULATOR_SUPPLY("vdd_core", "0-003c");

static struct regulator_init_data cam_vt_dio_reg_init_data = {
	.constraints = { .valid_ops_mask = REGULATOR_CHANGE_STATUS },
	.num_consumer_supplies = 1,
	.consumer_supplies = &cam_vt_dio_supply,
};

static struct fixed_voltage_config cam_vt_dio_fixed_voltage_cfg = {
	.supply_name	= "CAM_VT_D_IO",
	.microvolts	= 2800000,
	.gpio		= EXYNOS4_GPE2(1), /* CAM_PWR_EN2 */
	.enable_high	= 1,
	.init_data	= &cam_vt_dio_reg_init_data,
};

static struct platform_device cam_vt_dio_fixed_reg_dev = {
	.name = "reg-fixed-voltage", .id = FIXED_REG_ID_CAM_VT_DIO,
	.dev = { .platform_data	= &cam_vt_dio_fixed_voltage_cfg },
};

static struct regulator_consumer_supply cam_i_core_supply =
	REGULATOR_SUPPLY("core", "0-001f");

@@ -883,6 +916,28 @@ static struct s5p_platform_mipi_csis mipi_csis_platdata = {
#define GPIO_CAM_LEVEL_EN(n)	EXYNOS4_GPE4(n + 3)
#define GPIO_CAM_8M_ISP_INT	EXYNOS4_GPX1(5)	/* XEINT_13 */
#define GPIO_CAM_MEGA_nRST	EXYNOS4_GPE2(5)
#define GPIO_CAM_VGA_NRST	EXYNOS4_GPE4(7)
#define GPIO_CAM_VGA_NSTBY	EXYNOS4_GPE4(6)

static int s5k6aa_set_power(int on)
{
	gpio_set_value(GPIO_CAM_LEVEL_EN(2), !!on);
	return 0;
}

static struct s5k6aa_platform_data s5k6aa_platdata = {
	.mclk_frequency	= 21600000UL,
	.gpio_reset	= { GPIO_CAM_VGA_NRST, 0 },
	.gpio_stby	= { GPIO_CAM_VGA_NSTBY, 0 },
	.bus_type	= V4L2_MBUS_PARALLEL,
	.horiz_flip	= 1,
	.set_power	= s5k6aa_set_power,
};

static struct i2c_board_info s5k6aa_board_info = {
	I2C_BOARD_INFO("S5K6AA", 0x3C),
	.platform_data = &s5k6aa_platdata,
};

static int m5mols_set_power(struct device *dev, int on)
{
@@ -904,6 +959,14 @@ static struct i2c_board_info m5mols_board_info = {

static struct s5p_fimc_isp_info universal_camera_sensors[] = {
	{
		.mux_id		= 0,
		.flags		= V4L2_MBUS_PCLK_SAMPLE_FALLING |
				  V4L2_MBUS_VSYNC_ACTIVE_LOW,
		.bus_type	= FIMC_ITU_601,
		.board_info	= &s5k6aa_board_info,
		.i2c_bus_num	= 0,
		.clk_frequency	= 24000000UL,
	}, {
		.mux_id		= 0,
		.flags		= V4L2_MBUS_PCLK_SAMPLE_FALLING |
				  V4L2_MBUS_VSYNC_ACTIVE_LOW,
@@ -925,9 +988,11 @@ static struct gpio universal_camera_gpios[] = {
	{ GPIO_CAM_LEVEL_EN(2),	GPIOF_OUT_INIT_LOW,  "CAM_LVL_EN2" },
	{ GPIO_CAM_8M_ISP_INT,	GPIOF_IN,            "8M_ISP_INT"  },
	{ GPIO_CAM_MEGA_nRST,	GPIOF_OUT_INIT_LOW,  "CAM_8M_NRST" },
	{ GPIO_CAM_VGA_NRST,	GPIOF_OUT_INIT_LOW,  "CAM_VGA_NRST"  },
	{ GPIO_CAM_VGA_NSTBY,	GPIOF_OUT_INIT_LOW,  "CAM_VGA_NSTBY" },
};

static void universal_camera_init(void)
static void __init universal_camera_init(void)
{
	s3c_set_platdata(&mipi_csis_platdata, sizeof(mipi_csis_platdata),
			 &s5p_device_mipi_csis0);
@@ -948,6 +1013,8 @@ static void universal_camera_init(void)
	/* Free GPIOs controlled directly by the sensor drivers. */
	gpio_free(GPIO_CAM_MEGA_nRST);
	gpio_free(GPIO_CAM_8M_ISP_INT);
	gpio_free(GPIO_CAM_VGA_NRST);
	gpio_free(GPIO_CAM_VGA_NSTBY);

	if (exynos4_fimc_setup_gpio(S5P_CAMPORT_A))
		pr_err("Camera port A setup failed\n");
@@ -960,6 +1027,7 @@ static struct platform_device *universal_devices[] __initdata = {
	&s5p_device_fimc1,
	&s5p_device_fimc2,
	&s5p_device_fimc3,
	&s5p_device_g2d,
	&mmc0_fixed_voltage,
	&s3c_device_hsmmc0,
	&s3c_device_hsmmc2,
@@ -979,12 +1047,14 @@ static struct platform_device *universal_devices[] __initdata = {
	&universal_gpio_keys,
	&s5p_device_onenand,
	&s5p_device_fimd0,
	&s5p_device_jpeg,
	&s5p_device_mfc,
	&s5p_device_mfc_l,
	&s5p_device_mfc_r,
	&exynos4_device_pd[PD_MFC],
	&exynos4_device_pd[PD_LCD0],
	&exynos4_device_pd[PD_CAM],
	&cam_vt_dio_fixed_reg_dev,
	&cam_i_core_fixed_reg_dev,
	&cam_s_if_fixed_reg_dev,
	&s5p_device_fimc_md,
Loading