Commit c77ef898 authored by Olof Johansson's avatar Olof Johansson

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
...@@ -183,7 +183,9 @@ config MACH_SMDKV310 ...@@ -183,7 +183,9 @@ config MACH_SMDKV310
select S5P_DEV_FIMC1 select S5P_DEV_FIMC1
select S5P_DEV_FIMC2 select S5P_DEV_FIMC2
select S5P_DEV_FIMC3 select S5P_DEV_FIMC3
select S5P_DEV_G2D
select S5P_DEV_I2C_HDMIPHY select S5P_DEV_I2C_HDMIPHY
select S5P_DEV_JPEG
select S5P_DEV_MFC select S5P_DEV_MFC
select S5P_DEV_TV select S5P_DEV_TV
select S5P_DEV_USB_EHCI select S5P_DEV_USB_EHCI
...@@ -230,7 +232,9 @@ config MACH_UNIVERSAL_C210 ...@@ -230,7 +232,9 @@ config MACH_UNIVERSAL_C210
select S5P_DEV_FIMC1 select S5P_DEV_FIMC1
select S5P_DEV_FIMC2 select S5P_DEV_FIMC2
select S5P_DEV_FIMC3 select S5P_DEV_FIMC3
select S5P_DEV_G2D
select S5P_DEV_CSIS0 select S5P_DEV_CSIS0
select S5P_DEV_JPEG
select S5P_DEV_FIMD0 select S5P_DEV_FIMD0
select S3C_DEV_HSMMC select S3C_DEV_HSMMC
select S3C_DEV_HSMMC2 select S3C_DEV_HSMMC2
...@@ -268,11 +272,14 @@ config MACH_NURI ...@@ -268,11 +272,14 @@ config MACH_NURI
select S3C_DEV_I2C1 select S3C_DEV_I2C1
select S3C_DEV_I2C3 select S3C_DEV_I2C3
select S3C_DEV_I2C5 select S3C_DEV_I2C5
select S3C_DEV_I2C6
select S5P_DEV_CSIS0 select S5P_DEV_CSIS0
select S5P_DEV_JPEG
select S5P_DEV_FIMC0 select S5P_DEV_FIMC0
select S5P_DEV_FIMC1 select S5P_DEV_FIMC1
select S5P_DEV_FIMC2 select S5P_DEV_FIMC2
select S5P_DEV_FIMC3 select S5P_DEV_FIMC3
select S5P_DEV_G2D
select S5P_DEV_MFC select S5P_DEV_MFC
select S5P_DEV_USB_EHCI select S5P_DEV_USB_EHCI
select S5P_SETUP_MIPIPHY select S5P_SETUP_MIPIPHY
...@@ -283,6 +290,7 @@ config MACH_NURI ...@@ -283,6 +290,7 @@ config MACH_NURI
select EXYNOS4_SETUP_I2C1 select EXYNOS4_SETUP_I2C1
select EXYNOS4_SETUP_I2C3 select EXYNOS4_SETUP_I2C3
select EXYNOS4_SETUP_I2C5 select EXYNOS4_SETUP_I2C5
select EXYNOS4_SETUP_I2C6
select EXYNOS4_SETUP_SDHCI select EXYNOS4_SETUP_SDHCI
select EXYNOS4_SETUP_USB_PHY select EXYNOS4_SETUP_USB_PHY
select S5P_SETUP_MIPIPHY select S5P_SETUP_MIPIPHY
...@@ -303,7 +311,9 @@ config MACH_ORIGEN ...@@ -303,7 +311,9 @@ config MACH_ORIGEN
select S5P_DEV_FIMC2 select S5P_DEV_FIMC2
select S5P_DEV_FIMC3 select S5P_DEV_FIMC3
select S5P_DEV_FIMD0 select S5P_DEV_FIMD0
select S5P_DEV_G2D
select S5P_DEV_I2C_HDMIPHY select S5P_DEV_I2C_HDMIPHY
select S5P_DEV_JPEG
select S5P_DEV_MFC select S5P_DEV_MFC
select S5P_DEV_TV select S5P_DEV_TV
select S5P_DEV_USB_EHCI select S5P_DEV_USB_EHCI
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include <video/platform_lcd.h> #include <video/platform_lcd.h>
#include <media/m5mols.h> #include <media/m5mols.h>
#include <media/s5k6aa.h>
#include <media/s5p_fimc.h> #include <media/s5p_fimc.h>
#include <media/v4l2-mediabus.h> #include <media/v4l2-mediabus.h>
...@@ -75,6 +76,7 @@ enum fixed_regulator_id { ...@@ -75,6 +76,7 @@ enum fixed_regulator_id {
FIXED_REG_ID_MAX8903, FIXED_REG_ID_MAX8903,
FIXED_REG_ID_CAM_A28V, FIXED_REG_ID_CAM_A28V,
FIXED_REG_ID_CAM_12V, FIXED_REG_ID_CAM_12V,
FIXED_REG_ID_CAM_VT_15V,
}; };
static struct s3c2410_uartcfg nuri_uartcfgs[] __initdata = { static struct s3c2410_uartcfg nuri_uartcfgs[] __initdata = {
...@@ -399,6 +401,9 @@ static struct regulator_consumer_supply __initdata max8997_ldo4_[] = { ...@@ -399,6 +401,9 @@ static struct regulator_consumer_supply __initdata max8997_ldo4_[] = {
static struct regulator_consumer_supply __initdata max8997_ldo5_[] = { static struct regulator_consumer_supply __initdata max8997_ldo5_[] = {
REGULATOR_SUPPLY("vhsic", "modemctl"), /* MODEM */ 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_[] = { static struct regulator_consumer_supply __initdata max8997_ldo7_[] = {
REGULATOR_SUPPLY("dig_18", "0-001f"), /* HCD803 */ REGULATOR_SUPPLY("dig_18", "0-001f"), /* HCD803 */
}; };
...@@ -431,7 +436,7 @@ static struct regulator_consumer_supply __initdata max8997_buck1_[] = { ...@@ -431,7 +436,7 @@ static struct regulator_consumer_supply __initdata max8997_buck1_[] = {
REGULATOR_SUPPLY("vdd_arm", NULL), /* CPUFREQ */ REGULATOR_SUPPLY("vdd_arm", NULL), /* CPUFREQ */
}; };
static struct regulator_consumer_supply __initdata max8997_buck2_[] = { 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_[] = { static struct regulator_consumer_supply __initdata max8997_buck3_[] = {
REGULATOR_SUPPLY("vdd", "mali_dev.0"), /* G3D of Exynos 4 */ REGULATOR_SUPPLY("vdd", "mali_dev.0"), /* G3D of Exynos 4 */
...@@ -546,6 +551,8 @@ static struct regulator_init_data __initdata max8997_ldo6_data = { ...@@ -546,6 +551,8 @@ static struct regulator_init_data __initdata max8997_ldo6_data = {
.enabled = 1, .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 = { static struct regulator_init_data __initdata max8997_ldo7_data = {
...@@ -742,7 +749,7 @@ static struct regulator_init_data __initdata max8997_buck2_data = { ...@@ -742,7 +749,7 @@ static struct regulator_init_data __initdata max8997_buck2_data = {
.constraints = { .constraints = {
.name = "VINT_1.1V_C210", .name = "VINT_1.1V_C210",
.min_uV = 900000, .min_uV = 900000,
.max_uV = 1100000, .max_uV = 1200000,
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE, .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
.always_on = 1, .always_on = 1,
.state_mem = { .state_mem = {
...@@ -957,7 +964,6 @@ static struct max8997_platform_data __initdata nuri_max8997_pdata = { ...@@ -957,7 +964,6 @@ static struct max8997_platform_data __initdata nuri_max8997_pdata = {
.regulators = nuri_max8997_regulators, .regulators = nuri_max8997_regulators,
.buck125_gpios = { EXYNOS4_GPX0(5), EXYNOS4_GPX0(6), EXYNOS4_GPL0(0) }, .buck125_gpios = { EXYNOS4_GPX0(5), EXYNOS4_GPX0(6), EXYNOS4_GPL0(0) },
.buck2_gpiodvs = true,
.buck1_voltage[0] = 1350000, /* 1.35V */ .buck1_voltage[0] = 1350000, /* 1.35V */
.buck1_voltage[1] = 1300000, /* 1.3V */ .buck1_voltage[1] = 1300000, /* 1.3V */
...@@ -1116,7 +1122,30 @@ static void __init nuri_ehci_init(void) ...@@ -1116,7 +1122,30 @@ static void __init nuri_ehci_init(void)
} }
/* CAMERA */ /* 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[] = { static struct regulator_consumer_supply cam_vdda_supply[] = {
REGULATOR_SUPPLY("vdda", "6-003c"),
REGULATOR_SUPPLY("a_sensor", "0-001f"), REGULATOR_SUPPLY("a_sensor", "0-001f"),
}; };
...@@ -1173,6 +1202,21 @@ static struct s5p_platform_mipi_csis mipi_csis_platdata = { ...@@ -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_MEGA_RST EXYNOS4_GPY3(7) /* ISP_RESET */
#define GPIO_CAM_8M_ISP_INT EXYNOS4_GPL2(5) #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 = { static struct m5mols_platform_data m5mols_platdata = {
.gpio_reset = GPIO_CAM_MEGA_RST, .gpio_reset = GPIO_CAM_MEGA_RST,
...@@ -1185,6 +1229,13 @@ static struct i2c_board_info m5mols_board_info = { ...@@ -1185,6 +1229,13 @@ static struct i2c_board_info m5mols_board_info = {
static struct s5p_fimc_isp_info nuri_camera_sensors[] = { 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 | .flags = V4L2_MBUS_PCLK_SAMPLE_FALLING |
V4L2_MBUS_VSYNC_ACTIVE_LOW, V4L2_MBUS_VSYNC_ACTIVE_LOW,
.bus_type = FIMC_MIPI_CSI2, .bus_type = FIMC_MIPI_CSI2,
...@@ -1200,11 +1251,13 @@ static struct s5p_platform_fimc fimc_md_platdata = { ...@@ -1200,11 +1251,13 @@ static struct s5p_platform_fimc fimc_md_platdata = {
}; };
static struct gpio nuri_camera_gpios[] = { 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_8M_ISP_INT, GPIOF_IN, "8M_ISP_INT" },
{ GPIO_CAM_MEGA_RST, GPIOF_OUT_INIT_LOW, "CAM_8M_NRST" }, { 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), s3c_set_platdata(&mipi_csis_platdata, sizeof(mipi_csis_platdata),
&s5p_device_mipi_csis0); &s5p_device_mipi_csis0);
...@@ -1224,6 +1277,8 @@ static void nuri_camera_init(void) ...@@ -1224,6 +1277,8 @@ static void nuri_camera_init(void)
pr_err("%s: Failed to configure 8M_ISP_INT GPIO\n", __func__); pr_err("%s: Failed to configure 8M_ISP_INT GPIO\n", __func__);
/* Free GPIOs controlled directly by the sensor drivers. */ /* 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); gpio_free(GPIO_CAM_MEGA_RST);
if (exynos4_fimc_setup_gpio(S5P_CAMPORT_A)) { if (exynos4_fimc_setup_gpio(S5P_CAMPORT_A)) {
...@@ -1234,15 +1289,27 @@ static void nuri_camera_init(void) ...@@ -1234,15 +1289,27 @@ static void nuri_camera_init(void)
s5p_gpio_set_drvstr(EXYNOS4_GPJ1(3), S5P_GPIO_DRVSTR_LV4); 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 = { static struct s3c2410_platform_i2c nuri_i2c0_platdata __initdata = {
.frequency = 400000U, .frequency = 400000U,
.sda_delay = 200, .sda_delay = 200,
}; };
/* DEVFREQ controlling memory/bus */
static struct platform_device exynos4_bus_devfreq = {
.name = "exynos4210-busfreq",
};
static struct platform_device *nuri_devices[] __initdata = { static struct platform_device *nuri_devices[] __initdata = {
/* Samsung Platform Devices */ /* Samsung Platform Devices */
&s3c_device_i2c5, /* PMIC should initialize first */ &s3c_device_i2c5, /* PMIC should initialize first */
&s3c_device_i2c0, &s3c_device_i2c0,
&s3c_device_i2c6,
&emmc_fixed_voltage, &emmc_fixed_voltage,
&s5p_device_mipi_csis0, &s5p_device_mipi_csis0,
&s5p_device_fimc0, &s5p_device_fimc0,
...@@ -1259,6 +1326,8 @@ static struct platform_device *nuri_devices[] __initdata = { ...@@ -1259,6 +1326,8 @@ static struct platform_device *nuri_devices[] __initdata = {
&s3c_device_i2c3, &s3c_device_i2c3,
&i2c9_gpio, &i2c9_gpio,
&s3c_device_adc, &s3c_device_adc,
&s5p_device_g2d,
&s5p_device_jpeg,
&s3c_device_rtc, &s3c_device_rtc,
&s5p_device_mfc, &s5p_device_mfc,
&s5p_device_mfc_l, &s5p_device_mfc_l,
...@@ -1274,8 +1343,10 @@ static struct platform_device *nuri_devices[] __initdata = { ...@@ -1274,8 +1343,10 @@ static struct platform_device *nuri_devices[] __initdata = {
&nuri_backlight_device, &nuri_backlight_device,
&max8903_fixed_reg_dev, &max8903_fixed_reg_dev,
&nuri_max8903_device, &nuri_max8903_device,
&cam_vt_cam15_fixed_rdev,
&cam_vdda_fixed_rdev, &cam_vdda_fixed_rdev,
&cam_8m_12v_fixed_rdev, &cam_8m_12v_fixed_rdev,
&exynos4_bus_devfreq,
}; };
static void __init nuri_map_io(void) static void __init nuri_map_io(void)
...@@ -1305,6 +1376,7 @@ static void __init nuri_machine_init(void) ...@@ -1305,6 +1376,7 @@ static void __init nuri_machine_init(void)
i2c_register_board_info(5, i2c5_devs, ARRAY_SIZE(i2c5_devs)); i2c_register_board_info(5, i2c5_devs, ARRAY_SIZE(i2c5_devs));
i2c9_devs[I2C9_MAX17042].irq = gpio_to_irq(EXYNOS4_GPX2(3)); i2c9_devs[I2C9_MAX17042].irq = gpio_to_irq(EXYNOS4_GPX2(3));
i2c_register_board_info(9, i2c9_devs, ARRAY_SIZE(i2c9_devs)); 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); s5p_fimd0_set_platdata(&nuri_fb_pdata);
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include <linux/regulator/machine.h> #include <linux/regulator/machine.h>
#include <linux/mfd/max8997.h> #include <linux/mfd/max8997.h>
#include <linux/lcd.h> #include <linux/lcd.h>
#include <linux/rfkill-gpio.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/hardware/gic.h> #include <asm/hardware/gic.h>
...@@ -235,6 +236,7 @@ static struct regulator_init_data __initdata max8997_ldo9_data = { ...@@ -235,6 +236,7 @@ static struct regulator_init_data __initdata max8997_ldo9_data = {
.min_uV = 2800000, .min_uV = 2800000,
.max_uV = 2800000, .max_uV = 2800000,
.apply_uV = 1, .apply_uV = 1,
.always_on = 1,
.valid_ops_mask = REGULATOR_CHANGE_STATUS, .valid_ops_mask = REGULATOR_CHANGE_STATUS,
.state_mem = { .state_mem = {
.disabled = 1, .disabled = 1,
...@@ -278,6 +280,7 @@ static struct regulator_init_data __initdata max8997_ldo14_data = { ...@@ -278,6 +280,7 @@ static struct regulator_init_data __initdata max8997_ldo14_data = {
.min_uV = 1800000, .min_uV = 1800000,
.max_uV = 1800000, .max_uV = 1800000,
.apply_uV = 1, .apply_uV = 1,
.always_on = 1,
.valid_ops_mask = REGULATOR_CHANGE_STATUS, .valid_ops_mask = REGULATOR_CHANGE_STATUS,
.state_mem = { .state_mem = {
.disabled = 1, .disabled = 1,
...@@ -293,6 +296,7 @@ static struct regulator_init_data __initdata max8997_ldo17_data = { ...@@ -293,6 +296,7 @@ static struct regulator_init_data __initdata max8997_ldo17_data = {
.min_uV = 3300000, .min_uV = 3300000,
.max_uV = 3300000, .max_uV = 3300000,
.apply_uV = 1, .apply_uV = 1,
.always_on = 1,
.valid_ops_mask = REGULATOR_CHANGE_STATUS, .valid_ops_mask = REGULATOR_CHANGE_STATUS,
.state_mem = { .state_mem = {
.disabled = 1, .disabled = 1,
...@@ -602,6 +606,23 @@ static struct s3c_fb_platdata origen_lcd_pdata __initdata = { ...@@ -602,6 +606,23 @@ static struct s3c_fb_platdata origen_lcd_pdata __initdata = {
.setup_gpio = exynos4_fimd0_gpio_setup_24bpp, .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 = { static struct platform_device *origen_devices[] __initdata = {
&s3c_device_hsmmc2, &s3c_device_hsmmc2,
&s3c_device_hsmmc0, &s3c_device_hsmmc0,
...@@ -613,9 +634,12 @@ static struct platform_device *origen_devices[] __initdata = { ...@@ -613,9 +634,12 @@ static struct platform_device *origen_devices[] __initdata = {
&s5p_device_fimc1, &s5p_device_fimc1,
&s5p_device_fimc2, &s5p_device_fimc2,
&s5p_device_fimc3, &s5p_device_fimc3,
&s5p_device_fimc_md,
&s5p_device_fimd0, &s5p_device_fimd0,
&s5p_device_g2d,
&s5p_device_hdmi, &s5p_device_hdmi,
&s5p_device_i2c_hdmiphy, &s5p_device_i2c_hdmiphy,
&s5p_device_jpeg,
&s5p_device_mfc, &s5p_device_mfc,
&s5p_device_mfc_l, &s5p_device_mfc_l,
&s5p_device_mfc_r, &s5p_device_mfc_r,
...@@ -630,6 +654,7 @@ static struct platform_device *origen_devices[] __initdata = { ...@@ -630,6 +654,7 @@ static struct platform_device *origen_devices[] __initdata = {
&exynos4_device_pd[PD_MFC], &exynos4_device_pd[PD_MFC],
&origen_device_gpiokeys, &origen_device_gpiokeys,
&origen_lcd_hv070wsa, &origen_lcd_hv070wsa,
&origen_device_bluetooth,
}; };
/* LCD Backlight data */ /* LCD Backlight data */
...@@ -643,6 +668,16 @@ static struct platform_pwm_backlight_data origen_bl_data = { ...@@ -643,6 +668,16 @@ static struct platform_pwm_backlight_data origen_bl_data = {
.pwm_period_ns = 1000, .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) static void s5p_tv_setup(void)
{ {
/* Direct HPD to HDMI chip */ /* Direct HPD to HDMI chip */
...@@ -703,6 +738,8 @@ static void __init origen_machine_init(void) ...@@ -703,6 +738,8 @@ static void __init origen_machine_init(void)
s5p_device_mfc.dev.parent = &exynos4_device_pd[PD_MFC].dev; s5p_device_mfc.dev.parent = &exynos4_device_pd[PD_MFC].dev;
samsung_bl_set(&origen_bl_gpio_info, &origen_bl_data); samsung_bl_set(&origen_bl_gpio_info, &origen_bl_data);
origen_bt_setup();
} }
MACHINE_START(ORIGEN, "ORIGEN") MACHINE_START(ORIGEN, "ORIGEN")
......
...@@ -270,6 +270,9 @@ static struct platform_device *smdkv310_devices[] __initdata = { ...@@ -270,6 +270,9 @@ static struct platform_device *smdkv310_devices[] __initdata = {
&s5p_device_fimc1, &s5p_device_fimc1,
&s5p_device_fimc2, &s5p_device_fimc2,
&s5p_device_fimc3, &s5p_device_fimc3,
&s5p_device_fimc_md,
&s5p_device_g2d,
&s5p_device_jpeg,
&exynos4_device_ac97, &exynos4_device_ac97,
&exynos4_device_i2s0, &exynos4_device_i2s0,
&exynos4_device_ohci, &exynos4_device_ohci,
......
...@@ -46,6 +46,7 @@ ...@@ -46,6 +46,7 @@
#include <media/v4l2-mediabus.h> #include <media/v4l2-mediabus.h>
#include <media/s5p_fimc.h> #include <media/s5p_fimc.h>
#include <media/m5mols.h> #include <media/m5mols.h>
#include <media/s5k6aa.h>
#include "common.h" #include "common.h"
...@@ -122,8 +123,10 @@ static struct regulator_consumer_supply lp3974_buck1_consumer = ...@@ -122,8 +123,10 @@ static struct regulator_consumer_supply lp3974_buck1_consumer =
static struct regulator_consumer_supply lp3974_buck2_consumer = static struct regulator_consumer_supply lp3974_buck2_consumer =
REGULATOR_SUPPLY("vddg3d", NULL); REGULATOR_SUPPLY("vddg3d", NULL);
static struct regulator_consumer_supply lp3974_buck3_consumer = static struct regulator_consumer_supply lp3974_buck3_consumer[] = {
REGULATOR_SUPPLY("vdet", "s5p-sdo"); REGULATOR_SUPPLY("vdet", "s5p-sdo"),
REGULATOR_SUPPLY("vdd_reg", "0-003c"),
};
static struct regulator_init_data lp3974_buck1_data = { static struct regulator_init_data lp3974_buck1_data = {
.constraints = { .constraints = {
...@@ -168,8 +171,8 @@ static struct regulator_init_data lp3974_buck3_data = { ...@@ -168,8 +171,8 @@ static struct regulator_init_data lp3974_buck3_data = {
.enabled = 1, .enabled = 1,
}, },
}, },
.num_consumer_supplies = 1, .num_consumer_supplies = ARRAY_SIZE(lp3974_buck3_consumer),
.consumer_supplies = &lp3974_buck3_consumer, .consumer_supplies = lp3974_buck3_consumer,
}; };
static struct regulator_init_data lp3974_buck4_data = { static struct regulator_init_data lp3974_buck4_data = {
...@@ -302,6 +305,9 @@ static struct regulator_init_data lp3974_ldo8_data = { ...@@ -302,6 +305,9 @@ static struct regulator_init_data lp3974_ldo8_data = {
.consumer_supplies = lp3974_ldo8_consumer, .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 = { static struct regulator_init_data lp3974_ldo9_data = {
.constraints = { .constraints = {
.name = "VCC_2.8V", .name = "VCC_2.8V",
...@@ -313,6 +319,8 @@ static struct regulator_init_data lp3974_ldo9_data = { ...@@ -313,6 +319,8 @@ static struct regulator_init_data lp3974_ldo9_data = {
.enabled = 1, .enabled = 1,
}, },
}, },
.num_consumer_supplies = 1,
.consumer_supplies = &lp3974_ldo9_consumer,
}; };
static struct regulator_init_data lp3974_ldo10_data = { static struct regulator_init_data lp3974_ldo10_data = {
...@@ -411,6 +419,7 @@ static struct regulator_init_data lp3974_ldo15_data = { ...@@ -411,6 +419,7 @@ static struct regulator_init_data lp3974_ldo15_data = {
}; };
static struct regulator_consumer_supply lp3974_ldo16_consumer[] = { static struct regulator_consumer_supply lp3974_ldo16_consumer[] = {
REGULATOR_SUPPLY("vdda", "0-003c"),
REGULATOR_SUPPLY("a_sensor", "0-001f"), REGULATOR_SUPPLY("a_sensor", "0-001f"),
}; };
...@@ -817,6 +826,8 @@ static struct s3c_fb_pd_win universal_fb_win0 = { ...@@ -817,6 +826,8 @@ static struct s3c_fb_pd_win universal_fb_win0 = {
}, },
.max_bpp = 32, .max_bpp = 32,
.default_bpp = 16, .default_bpp = 16,
.virtual_x = 480,
.virtual_y = 2 * 800,
}; };
static struct s3c_fb_platdata universal_lcd_pdata __initdata = { static struct s3c_fb_platdata universal_lcd_pdata __initdata = {
...@@ -828,6 +839,28 @@ 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, .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 = static struct regulator_consumer_supply cam_i_core_supply =
REGULATOR_SUPPLY("core", "0-001f"); REGULATOR_SUPPLY("core", "0-001f");
...@@ -883,6 +916,28 @@ static struct s5p_platform_mipi_csis mipi_csis_platdata = { ...@@ -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_LEVEL_EN(n) EXYNOS4_GPE4(n + 3)
#define GPIO_CAM_8M_ISP_INT EXYNOS4_GPX1(5) /* XEINT_13 */ #define GPIO_CAM_8M_ISP_INT EXYNOS4_GPX1(5) /* XEINT_13 */
#define GPIO_CAM_MEGA_nRST EXYNOS4_GPE2(5) #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) static int m5mols_set_power(struct device *dev, int on)
{ {
...@@ -904,6 +959,14 @@ static struct i2c_board_info m5mols_board_info = { ...@@ -904,6 +959,14 @@ static struct i2c_board_info m5mols_board_info = {
static struct s5p_fimc_isp_info universal_camera_sensors[] = { 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, .mux_id = 0,
.flags = V4L2_MBUS_PCLK_SAMPLE_FALLING | .flags = V4L2_MBUS_PCLK_SAMPLE_FALLING |
V4L2_MBUS_VSYNC_ACTIVE_LOW, V4L2_MBUS_VSYNC_ACTIVE_LOW,
...@@ -925,9 +988,11 @@ static struct gpio universal_camera_gpios[] = { ...@@ -925,9 +988,11 @@ static struct gpio universal_camera_gpios[] = {
{ GPIO_CAM_LEVEL_EN(2), GPIOF_OUT_INIT_LOW, "CAM_LVL_EN2" }, { GPIO_CAM_LEVEL_EN(2), GPIOF_OUT_INIT_LOW, "CAM_LVL_EN2" },
{ GPIO_CAM_8M_ISP_INT, GPIOF_IN, "8M_ISP_INT" }, { GPIO_CAM_8M_ISP_INT, GPIOF_IN, "8M_ISP_INT" },
{ GPIO_CAM_MEGA_nRST, GPIOF_OUT_INIT_LOW, "CAM_8M_NRST" }, { 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), s3c_set_platdata(&mipi_csis_platdata, sizeof(mipi_csis_platdata),
&s5p_device_mipi_csis0); &s5p_device_mipi_csis0);
...@@ -948,6 +1013,8 @@ static void universal_camera_init(void) ...@@ -948,6 +1013,8 @@ static void universal_camera_init(void)
/* Free GPIOs controlled directly by the sensor drivers. */ /* Free GPIOs controlled directly by the sensor drivers. */
gpio_free(GPIO_CAM_MEGA_nRST); gpio_free(GPIO_CAM_MEGA_nRST);
gpio_free(GPIO_CAM_8M_ISP_INT); 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)) if (exynos4_fimc_setup_gpio(S5P_CAMPORT_A))
pr_err("Camera port A setup failed\n"); pr_err("Camera port A setup failed\n");
...@@ -960,6 +1027,7 @@ static struct platform_device *universal_devices[] __initdata = { ...@@ -960,6 +1027,7 @@ static struct platform_device *universal_devices[] __initdata = {
&s5p_device_fimc1, &s5p_device_fimc1,
&s5p_device_fimc2, &s5p_device_fimc2,
&s5p_device_fimc3, &s5p_device_fimc3,
&s5p_device_g2d,
&mmc0_fixed_voltage, &mmc0_fixed_voltage,
&s3c_device_hsmmc0, &s3c_device_hsmmc0,
&s3c_device_hsmmc2, &s3c_device_hsmmc2,
...@@ -979,12 +1047,14 @@ static struct platform_device *universal_devices[] __initdata = { ...@@ -979,12 +1047,14 @@ static struct platform_device *universal_devices[] __initdata = {
&universal_gpio_keys, &universal_gpio_keys,
&s5p_device_onenand, &s5p_device_onenand,
&s5p_device_fimd0, &s5p_device_fimd0,
&s5p_device_jpeg,
&s5p_device_mfc, &s5p_device_mfc,
&s5p_device_mfc_l, &s5p_device_mfc_l,
&s5p_device_mfc_r, &s5p_device_mfc_r,
&exynos4_device_pd[PD_MFC], &exynos4_device_pd[PD_MFC],
&exynos4_device_pd[PD_LCD0], &exynos4_device_pd[PD_LCD0],
&exynos4_device_pd[PD_CAM], &exynos4_device_pd[PD_CAM],
&cam_vt_dio_fixed_reg_dev,
&cam_i_core_fixed_reg_dev, &cam_i_core_fixed_reg_dev,
&cam_s_if_fixed_reg_dev, &cam_s_if_fixed_reg_dev,
&s5p_device_fimc_md, &s5p_device_fimc_md,
......
...@@ -296,5 +296,6 @@ config MACH_WLF_CRAGG_6410 ...@@ -296,5 +296,6 @@ config MACH_WLF_CRAGG_6410
select S3C64XX_DEV_SPI0 select S3C64XX_DEV_SPI0
select SAMSUNG_GPIO_EXTRA128 select SAMSUNG_GPIO_EXTRA128
select I2C select I2C
select LEDS_GPIO_REGISTER
help help
Machine support for the Wolfson Cragganmore S3C6410 variant. Machine support for the Wolfson Cragganmore S3C6410 variant.
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include <linux/export.h> #include <linux/export.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/spi/spi.h>
#include <linux/mfd/wm831x/irq.h> #include <linux/mfd/wm831x/irq.h>
#include <linux/mfd/wm831x/gpio.h> #include <linux/mfd/wm831x/gpio.h>
...@@ -21,8 +22,25 @@ ...@@ -21,8 +22,25 @@
#include <sound/wm8962.h> #include <sound/wm8962.h>
#include <sound/wm9081.h> #include <sound/wm9081.h>
#include <plat/s3c64xx-spi.h>
#include <mach/crag6410.h> #include <mach/crag6410.h>
static struct s3c64xx_spi_csinfo wm0010_spi_csinfo = {
.set_level = gpio_set_value,
.line = S3C64XX_GPC(3),
};
static struct spi_board_info wm1253_devs[] = {
[0] = {
.modalias = "wm0010",
.bus_num = 0,
.chip_select = 0,
.mode = SPI_MODE_0,
.controller_data = &wm0010_spi_csinfo,
},
};
static struct wm5100_pdata wm5100_pdata = { static struct wm5100_pdata wm5100_pdata = {
.ldo_ena = S3C64XX_GPN(7), .ldo_ena = S3C64XX_GPN(7),
.irq_flags = IRQF_TRIGGER_HIGH, .irq_flags = IRQF_TRIGGER_HIGH,
...@@ -158,14 +176,21 @@ static __devinitdata const struct { ...@@ -158,14 +176,21 @@ static __devinitdata const struct {
const char *name; const char *name;
const struct i2c_board_info *i2c_devs; const struct i2c_board_info *i2c_devs;
int num_i2c_devs; int num_i2c_devs;
const struct spi_board_info *spi_devs;
int num_spi_devs;
} gf_mods[] = { } gf_mods[] = {
{ .id = 0x01, .name = "1250-EV1 Springbank" }, { .id = 0x01, .name = "1250-EV1 Springbank" },
{ .id = 0x02, .name = "1251-EV1 Jura" }, { .id = 0x02, .name = "1251-EV1 Jura" },
{ .id = 0x03, .name = "1252-EV1 Glenlivet" }, { .id = 0x03, .name = "1252-EV1 Glenlivet" },
{ .id = 0x11, .name = "6249-EV2 Glenfarclas", }, { .id = 0x11, .name = "6249-EV2 Glenfarclas", },
{ .id = 0x14, .name = "6271-EV1 Lochnagar" },
{ .id = 0x15, .name = "XXXX-EV1 Bells" },
{ .id = 0x21, .name = "1275-EV1 Mortlach" }, { .id = 0x21, .name = "1275-EV1 Mortlach" },
{ .id = 0x25, .name = "1274-EV1 Glencadam" }, { .id = 0x25, .name = "1274-EV1 Glencadam" },
{ .id = 0x31, .name = "1253-EV1 Tomatin", }, { .id = 0x31, .name = "1253-EV1 Tomatin",
.spi_devs = wm1253_devs, .num_spi_devs = ARRAY_SIZE(wm1253_devs) },
{ .id = 0x32, .name = "XXXX-EV1 Caol Illa" },
{ .id = 0x33, .name = "XXXX-EV1 Oban" },
{ .id = 0x39, .name = "1254-EV1 Dallas Dhu", { .id = 0x39, .name = "1254-EV1 Dallas Dhu",
.i2c_devs = wm1254_devs, .num_i2c_devs = ARRAY_SIZE(wm1254_devs) }, .i2c_devs = wm1254_devs, .num_i2c_devs = ARRAY_SIZE(wm1254_devs) },
{ .id = 0x3a, .name = "1259-EV1 Tobermory", { .id = 0x3a, .name = "1259-EV1 Tobermory",
...@@ -197,12 +222,16 @@ static __devinit int wlf_gf_module_probe(struct i2c_client *i2c, ...@@ -197,12 +222,16 @@ static __devinit int wlf_gf_module_probe(struct i2c_client *i2c,
if (i < ARRAY_SIZE(gf_mods)) { if (i < ARRAY_SIZE(gf_mods)) {
dev_info(&i2c->dev, "%s revision %d\n", dev_info(&i2c->dev, "%s revision %d\n",
gf_mods[i].name, rev + 1); gf_mods[i].name, rev + 1);
for (j = 0; j < gf_mods[i].num_i2c_devs; j++) { for (j = 0; j < gf_mods[i].num_i2c_devs; j++) {
if (!i2c_new_device(i2c->adapter, if (!i2c_new_device(i2c->adapter,
&(gf_mods[i].i2c_devs[j]))) &(gf_mods[i].i2c_devs[j])))
dev_err(&i2c->dev, dev_err(&i2c->dev,
"Failed to register dev: %d\n", ret); "Failed to register dev: %d\n", ret);
} }
spi_register_board_info(gf_mods[i].spi_devs,
gf_mods[i].num_spi_devs);
} else { } else {
dev_warn(&i2c->dev, "Unknown module ID 0x%x revision %d\n", dev_warn(&i2c->dev, "Unknown module ID 0x%x revision %d\n",
id, rev + 1); id, rev + 1);
......
...@@ -19,7 +19,9 @@ ...@@ -19,7 +19,9 @@
#include <linux/io.h> #include <linux/io.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/gpio.h> #include <linux/gpio.h>
#include <linux/leds.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/mmc/host.h>
#include <linux/regulator/machine.h> #include <linux/regulator/machine.h>
#include <linux/regulator/fixed.h> #include <linux/regulator/fixed.h>
#include <linux/pwm_backlight.h> #include <linux/pwm_backlight.h>
...@@ -298,6 +300,7 @@ static struct platform_device littlemill_device = { ...@@ -298,6 +300,7 @@ static struct platform_device littlemill_device = {
}; };
static struct regulator_consumer_supply wallvdd_consumers[] = { static struct regulator_consumer_supply wallvdd_consumers[] = {
REGULATOR_SUPPLY("SPKVDD", "1-001a"),
REGULATOR_SUPPLY("SPKVDD1", "1-001a"), REGULATOR_SUPPLY("SPKVDD1", "1-001a"),
REGULATOR_SUPPLY("SPKVDD2", "1-001a"), REGULATOR_SUPPLY("SPKVDD2", "1-001a"),
REGULATOR_SUPPLY("SPKVDDL", "1-001a"), REGULATOR_SUPPLY("SPKVDDL", "1-001a"),
...@@ -574,11 +577,19 @@ static struct s3c2410_platform_i2c i2c0_pdata = { ...@@ -574,11 +577,19 @@ static struct s3c2410_platform_i2c i2c0_pdata = {
.frequency = 400000, .frequency = 400000,
}; };
static struct regulator_consumer_supply pvdd_1v2_consumers[] __initdata = {
REGULATOR_SUPPLY("DCVDD", "spi0.0"),
REGULATOR_SUPPLY("AVDD", "spi0.0"),
};
static struct regulator_init_data pvdd_1v2 __initdata = { static struct regulator_init_data pvdd_1v2 __initdata = {
.constraints = { .constraints = {
.name = "PVDD_1V2", .name = "PVDD_1V2",
.always_on = 1, .valid_ops_mask = REGULATOR_CHANGE_STATUS,
}, },
.consumer_supplies = pvdd_1v2_consumers,
.num_consumer_supplies = ARRAY_SIZE(pvdd_1v2_consumers),
}; };
static struct regulator_consumer_supply pvdd_1v8_consumers[] __initdata = { static struct regulator_consumer_supply pvdd_1v8_consumers[] __initdata = {
...@@ -592,6 +603,7 @@ static struct regulator_consumer_supply pvdd_1v8_consumers[] __initdata = { ...@@ -592,6 +603,7 @@ static struct regulator_consumer_supply pvdd_1v8_consumers[] __initdata = {
REGULATOR_SUPPLY("AVDD2", "1-001a"), REGULATOR_SUPPLY("AVDD2", "1-001a"),
REGULATOR_SUPPLY("DCVDD", "1-001a"), REGULATOR_SUPPLY("DCVDD", "1-001a"),
REGULATOR_SUPPLY("AVDD", "1-001a"), REGULATOR_SUPPLY("AVDD", "1-001a"),
REGULATOR_SUPPLY("DBVDD", "spi0.0"),
}; };
static struct regulator_init_data pvdd_1v8 __initdata = { static struct regulator_init_data pvdd_1v8 __initdata = {
...@@ -681,6 +693,7 @@ static void __init crag6410_map_io(void) ...@@ -681,6 +693,7 @@ static void __init crag6410_map_io(void)
static struct s3c_sdhci_platdata crag6410_hsmmc2_pdata = { static struct s3c_sdhci_platdata crag6410_hsmmc2_pdata = {
.max_width = 4, .max_width = 4,
.cd_type = S3C_SDHCI_CD_PERMANENT, .cd_type = S3C_SDHCI_CD_PERMANENT,
.host_caps = MMC_CAP_POWER_OFF_CARD,
}; };
static void crag6410_cfg_sdhci0(struct platform_device *dev, int width) static void crag6410_cfg_sdhci0(struct platform_device *dev, int width)
...@@ -696,6 +709,55 @@ static struct s3c_sdhci_platdata crag6410_hsmmc0_pdata = { ...@@ -696,6 +709,55 @@ static struct s3c_sdhci_platdata crag6410_hsmmc0_pdata = {
.max_width = 4, .max_width = 4,
.cd_type = S3C_SDHCI_CD_INTERNAL, .cd_type = S3C_SDHCI_CD_INTERNAL,
.cfg_gpio = crag6410_cfg_sdhci0, .cfg_gpio = crag6410_cfg_sdhci0,
.host_caps = MMC_CAP_POWER_OFF_CARD,
};
static const struct gpio_led gpio_leds[] = {
{
.name = "d13:green:",
.gpio = MMGPIO_GPIO_BASE + 0,
.default_state = LEDS_GPIO_DEFSTATE_ON,
},
{
.name = "d14:green:",
.gpio = MMGPIO_GPIO_BASE + 1,
.default_state = LEDS_GPIO_DEFSTATE_ON,
},
{
.name = "d15:green:",
.gpio = MMGPIO_GPIO_BASE + 2,
.default_state = LEDS_GPIO_DEFSTATE_ON,
},
{
.name = "d16:green:",
.gpio = MMGPIO_GPIO_BASE + 3,
.default_state = LEDS_GPIO_DEFSTATE_ON,
},
{
.name = "d17:green:",
.gpio = MMGPIO_GPIO_BASE + 4,
.default_state = LEDS_GPIO_DEFSTATE_ON,
},
{
.name = "d18:green:",
.gpio = MMGPIO_GPIO_BASE + 5,
.default_state = LEDS_GPIO_DEFSTATE_ON,
},
{
.name = "d19:green:",
.gpio = MMGPIO_GPIO_BASE + 6,
.default_state = LEDS_GPIO_DEFSTATE_ON,
},
{
.name = "d20:green:",
.gpio = MMGPIO_GPIO_BASE + 7,
.default_state = LEDS_GPIO_DEFSTATE_ON,
},
};
static const struct gpio_led_platform_data gpio_leds_pdata = {
.leds = gpio_leds,
.num_leds = ARRAY_SIZE(gpio_leds),
}; };
static void __init crag6410_machine_init(void) static void __init crag6410_machine_init(void)
...@@ -727,9 +789,12 @@ static void __init crag6410_machine_init(void) ...@@ -727,9 +789,12 @@ static void __init crag6410_machine_init(void)
i2c_register_board_info(1, i2c_devs1, ARRAY_SIZE(i2c_devs1)); i2c_register_board_info(1, i2c_devs1, ARRAY_SIZE(i2c_devs1));
samsung_keypad_set_platdata(&crag6410_keypad_data); samsung_keypad_set_platdata(&crag6410_keypad_data);
s3c64xx_spi0_set_platdata(&s3c64xx_spi0_pdata, 0, 1);
platform_add_devices(crag6410_devices, ARRAY_SIZE(crag6410_devices)); platform_add_devices(crag6410_devices, ARRAY_SIZE(crag6410_devices));
gpio_led_register_device(-1, &gpio_leds_pdata);
regulator_has_full_constraints(); regulator_has_full_constraints();
s3c64xx_pm_init(); s3c64xx_pm_init();
......
...@@ -118,6 +118,10 @@ config MACH_SMDKC110 ...@@ -118,6 +118,10 @@ config MACH_SMDKC110
select S3C_DEV_I2C2 select S3C_DEV_I2C2
select S3C_DEV_RTC select S3C_DEV_RTC
select S3C_DEV_WDT select S3C_DEV_WDT
select S5P_DEV_FIMC0
select S5P_DEV_FIMC1
select S5P_DEV_FIMC2
select S5P_DEV_MFC
select SAMSUNG_DEV_IDE select SAMSUNG_DEV_IDE
select S5PV210_SETUP_I2C1 select S5PV210_SETUP_I2C1
select S5PV210_SETUP_I2C2 select S5PV210_SETUP_I2C2
...@@ -142,6 +146,11 @@ config MACH_SMDKV210 ...@@ -142,6 +146,11 @@ config MACH_SMDKV210
select S3C_DEV_I2C2 select S3C_DEV_I2C2
select S3C_DEV_RTC select S3C_DEV_RTC
select S3C_DEV_WDT select S3C_DEV_WDT
select S5P_DEV_FIMC0
select S5P_DEV_FIMC1
select S5P_DEV_FIMC2
select S5P_DEV_JPEG
select S5P_DEV_MFC
select SAMSUNG_DEV_ADC select SAMSUNG_DEV_ADC
select SAMSUNG_DEV_BACKLIGHT select SAMSUNG_DEV_BACKLIGHT
select SAMSUNG_DEV_IDE select SAMSUNG_DEV_IDE
......
...@@ -339,6 +339,11 @@ static struct clk init_clocks_off[] = { ...@@ -339,6 +339,11 @@ static struct clk init_clocks_off[] = {
.parent = &clk_hclk_dsys.clk, .parent = &clk_hclk_dsys.clk,
.enable = s5pv210_clk_ip0_ctrl, .enable = s5pv210_clk_ip0_ctrl,
.ctrlbit = (1 << 26), .ctrlbit = (1 << 26),
}, {
.name = "jpeg",
.parent = &clk_hclk_dsys.clk,
.enable = s5pv210_clk_ip0_ctrl,
.ctrlbit = (1 << 28),
}, { }, {
.name = "mfc", .name = "mfc",
.devname = "s5p-mfc", .devname = "s5p-mfc",
......
...@@ -90,6 +90,8 @@ ...@@ -90,6 +90,8 @@
#define S5PV210_PA_FIMC1 0xFB300000 #define S5PV210_PA_FIMC1 0xFB300000
#define S5PV210_PA_FIMC2 0xFB400000 #define S5PV210_PA_FIMC2 0xFB400000
#define S5PV210_PA_JPEG 0xFB600000
#define S5PV210_PA_SDO 0xF9000000 #define S5PV210_PA_SDO 0xF9000000
#define S5PV210_PA_VP 0xF9100000 #define S5PV210_PA_VP 0xF9100000
#define S5PV210_PA_MIXER 0xF9200000 #define S5PV210_PA_MIXER 0xF9200000
...@@ -132,6 +134,8 @@ ...@@ -132,6 +134,8 @@
#define S5P_PA_SYSCON S5PV210_PA_SYSCON #define S5P_PA_SYSCON S5PV210_PA_SYSCON
#define S5P_PA_TIMER S5PV210_PA_TIMER #define S5P_PA_TIMER S5PV210_PA_TIMER
#define S5P_PA_JPEG S5PV210_PA_JPEG
#define SAMSUNG_PA_ADC S5PV210_PA_ADC #define SAMSUNG_PA_ADC S5PV210_PA_ADC
#define SAMSUNG_PA_CFCON S5PV210_PA_CFCON #define SAMSUNG_PA_CFCON S5PV210_PA_CFCON
#define SAMSUNG_PA_KEYPAD S5PV210_PA_KEYPAD #define SAMSUNG_PA_KEYPAD S5PV210_PA_KEYPAD
......
...@@ -616,6 +616,7 @@ static struct platform_device *aquila_devices[] __initdata = { ...@@ -616,6 +616,7 @@ static struct platform_device *aquila_devices[] __initdata = {
&s5p_device_fimc0, &s5p_device_fimc0,
&s5p_device_fimc1, &s5p_device_fimc1,
&s5p_device_fimc2, &s5p_device_fimc2,
&s5p_device_fimc_md,
&s5pv210_device_iis0, &s5pv210_device_iis0,
&wm8994_fixed_voltage0, &wm8994_fixed_voltage0,
&wm8994_fixed_voltage1, &wm8994_fixed_voltage1,
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#include <plat/iic.h> #include <plat/iic.h>
#include <plat/pm.h> #include <plat/pm.h>
#include <plat/s5p-time.h> #include <plat/s5p-time.h>
#include <plat/mfc.h>
#include "common.h" #include "common.h"
...@@ -94,6 +95,13 @@ static struct platform_device *smdkc110_devices[] __initdata = { ...@@ -94,6 +95,13 @@ static struct platform_device *smdkc110_devices[] __initdata = {
&s3c_device_i2c2, &s3c_device_i2c2,
&s3c_device_rtc, &s3c_device_rtc,
&s3c_device_wdt, &s3c_device_wdt,
&s5p_device_fimc0,
&s5p_device_fimc1,
&s5p_device_fimc2,
&s5p_device_fimc_md,
&s5p_device_mfc,
&s5p_device_mfc_l,
&s5p_device_mfc_r,
}; };
static struct i2c_board_info smdkc110_i2c_devs0[] __initdata = { static struct i2c_board_info smdkc110_i2c_devs0[] __initdata = {
...@@ -117,6 +125,11 @@ static void __init smdkc110_map_io(void) ...@@ -117,6 +125,11 @@ static void __init smdkc110_map_io(void)
s5p_set_timer_source(S5P_PWM3, S5P_PWM4); s5p_set_timer_source(S5P_PWM3, S5P_PWM4);
} }
static void __init smdkc110_reserve(void)
{
s5p_mfc_reserve_mem(0x43000000, 8 << 20, 0x51000000, 8 << 20);
}
static void __init smdkc110_machine_init(void) static void __init smdkc110_machine_init(void)
{ {
s3c_pm_init(); s3c_pm_init();
...@@ -145,4 +158,5 @@ MACHINE_START(SMDKC110, "SMDKC110") ...@@ -145,4 +158,5 @@ MACHINE_START(SMDKC110, "SMDKC110")
.init_machine = smdkc110_machine_init, .init_machine = smdkc110_machine_init,
.timer = &s5p_timer, .timer = &s5p_timer,
.restart = s5pv210_restart, .restart = s5pv210_restart,
.reserve = &smdkc110_reserve,
MACHINE_END MACHINE_END
...@@ -46,6 +46,7 @@ ...@@ -46,6 +46,7 @@
#include <plat/s5p-time.h> #include <plat/s5p-time.h>
#include <plat/backlight.h> #include <plat/backlight.h>
#include <plat/regs-fb-v4.h> #include <plat/regs-fb-v4.h>
#include <plat/mfc.h>
#include "common.h" #include "common.h"
...@@ -223,6 +224,14 @@ static struct platform_device *smdkv210_devices[] __initdata = { ...@@ -223,6 +224,14 @@ static struct platform_device *smdkv210_devices[] __initdata = {
&s3c_device_rtc, &s3c_device_rtc,
&s3c_device_ts, &s3c_device_ts,
&s3c_device_wdt, &s3c_device_wdt,
&s5p_device_fimc0,
&s5p_device_fimc1,
&s5p_device_fimc2,
&s5p_device_fimc_md,
&s5p_device_jpeg,
&s5p_device_mfc,
&s5p_device_mfc_l,
&s5p_device_mfc_r,
&s5pv210_device_ac97, &s5pv210_device_ac97,
&s5pv210_device_iis0, &s5pv210_device_iis0,
&s5pv210_device_spdif, &s5pv210_device_spdif,
...@@ -282,6 +291,11 @@ static void __init smdkv210_map_io(void) ...@@ -282,6 +291,11 @@ static void __init smdkv210_map_io(void)
s5p_set_timer_source(S5P_PWM2, S5P_PWM4); s5p_set_timer_source(S5P_PWM2, S5P_PWM4);
} }
static void __init smdkv210_reserve(void)
{
s5p_mfc_reserve_mem(0x43000000, 8 << 20, 0x51000000, 8 << 20);
}
static void __init smdkv210_machine_init(void) static void __init smdkv210_machine_init(void)
{ {
s3c_pm_init(); s3c_pm_init();
...@@ -319,4 +333,5 @@ MACHINE_START(SMDKV210, "SMDKV210") ...@@ -319,4 +333,5 @@ MACHINE_START(SMDKV210, "SMDKV210")
.init_machine = smdkv210_machine_init, .init_machine = smdkv210_machine_init,
.timer = &s5p_timer, .timer = &s5p_timer,
.restart = s5pv210_restart, .restart = s5pv210_restart,
.reserve = &smdkv210_reserve,
MACHINE_END MACHINE_END
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment