diff options
Diffstat (limited to 'arch/arm/mach-exynos/mach-midas.c')
-rw-r--r-- | arch/arm/mach-exynos/mach-midas.c | 1263 |
1 files changed, 960 insertions, 303 deletions
diff --git a/arch/arm/mach-exynos/mach-midas.c b/arch/arm/mach-exynos/mach-midas.c index 4f21630..41ab1fd 100644 --- a/arch/arm/mach-exynos/mach-midas.c +++ b/arch/arm/mach-exynos/mach-midas.c @@ -36,11 +36,11 @@ #ifdef CONFIG_BATTERY_MAX17047_FUELGAUGE #include <linux/battery/max17047_fuelgauge.h> #endif -#if defined(CONFIG_BATTERY_SAMSUNG) || defined(CONFIG_BATTERY_SAMSUNG_S2PLUS) +#if defined(CONFIG_BATTERY_SAMSUNG) #include <linux/power_supply.h> #include <linux/battery/samsung_battery.h> #endif -#if defined(CONFIG_CHARGER_MAX8922_U1) || defined(CONFIG_CHARGER_MAX8922_S2PLUS) +#if defined(CONFIG_CHARGER_MAX8922_U1) #include <linux/power/max8922_charger_u1.h> #endif #ifdef CONFIG_STMPE811_ADC @@ -51,6 +51,10 @@ #include <linux/delay.h> #include <linux/bootmem.h> +#ifdef CONFIG_DMA_CMA +#include <linux/dma-contiguous.h> +#endif + #include <asm/mach/arch.h> #include <asm/mach-types.h> @@ -81,6 +85,8 @@ #if defined(CONFIG_TDMB) || defined(CONFIG_TDMB_MODULE) #include <mach/tdmb_pdata.h> +#elif defined(CONFIG_ISDBT) +#include <media/isdbt_pdata.h> #endif #include <mach/map.h> @@ -122,8 +128,10 @@ struct s3cfb_extdsp_lcd { #include <mach/sec_debug.h> #include <mach/gpio-midas.h> -#ifdef CONFIG_MACH_GC1 +#if defined(CONFIG_MACH_GC1) #include <mach/gc1-power.h> +#elif defined(CONFIG_MACH_T0) +#include <mach/t0-power.h> #else #include <mach/midas-power.h> #endif @@ -137,19 +145,22 @@ struct s3cfb_extdsp_lcd { #include <mach/midas-lcd.h> #include <mach/midas-sound.h> -#ifdef CONFIG_USB_HOST_NOTIFY -#include <linux/host_notify.h> +#ifdef CONFIG_INPUT_WACOM +#include <mach/midas-wacom.h> #endif -#if defined(CONFIG_PHONE_IPC_SPI) -#include <linux/phone_svn/ipc_spi.h> -#include <linux/irq.h> +#ifdef CONFIG_USB_HOST_NOTIFY +#include <linux/host_notify.h> #endif #ifdef CONFIG_KEYBOARD_CYPRESS_TOUCH #include <linux/i2c/touchkey_i2c.h> #endif +#if defined(CONFIG_MACH_GC1) +#include <mach/gc1-jack.h> +#endif + #include "board-mobile.h" /* Following are default values for UCON, ULCON and UFCON UART registers */ @@ -226,8 +237,9 @@ static struct spi_board_info spi1_board_info[] __initdata = { }; #endif -#if defined(CONFIG_PHONE_IPC_SPI) \ - || defined(CONFIG_TDMB) || defined(CONFIG_TDMB_MODULE) +#if defined(CONFIG_LINK_DEVICE_SPI) \ + || defined(CONFIG_TDMB) || defined(CONFIG_TDMB_MODULE) \ + || defined(CONFIG_ISDBT) || defined(CONFIG_LINK_DEVICE_PLD) static struct s3c64xx_spi_csinfo spi2_csi[] = { [0] = { .line = EXYNOS4_GPC1(2), @@ -246,9 +258,19 @@ static struct spi_board_info spi2_board_info[] __initdata = { .mode = SPI_MODE_0, .controller_data = &spi2_csi[0], }, +#elif defined(CONFIG_ISDBT) + { + .modalias = "fc8150_spi", + .platform_data = NULL, + .max_speed_hz = 5000000, + .bus_num = 2, + .chip_select = 0, + .mode = SPI_MODE_0, + .controller_data = &spi2_csi[0], + }, #else { - .modalias = "ipc_spi", + .modalias = "modem_if_spi", .platform_data = NULL, .bus_num = 2, .chip_select = 0, @@ -266,37 +288,39 @@ static struct i2c_board_info i2c_devs8_emul[]; #ifdef CONFIG_KEYBOARD_CYPRESS_TOUCH static void touchkey_init_hw(void) { -#if defined(CONFIG_MACH_M0) || defined(CONFIG_MACH_C1VZW)\ -|| defined(CONFIG_MACH_C1) -#if defined(CONFIG_MACH_M0_CHNOPEN) || defined(CONFIG_MACH_M0_HKTW)\ -|| defined(CONFIG_TARGET_LOCALE_KOR) -/* do nothing */ +#if defined(CONFIG_MACH_M0) || defined(CONFIG_MACH_C1) +#if defined(CONFIG_MACH_M0_CHNOPEN) || defined(CONFIG_MACH_M0_HKTW) || \ + defined(CONFIG_TARGET_LOCALE_KOR) + /* do nothing */ #elif defined(CONFIG_MACH_C1) #if defined(CONFIG_MACH_C1_KOR_SKT) || defined(CONFIG_MACH_C1_KOR_KT) if (system_rev < 8) - return ; + return; #elif defined(CONFIG_MACH_C1_KOR_LGT) if (system_rev < 5) - return ; + return; #else if (system_rev < 7) - return ; -#endif + return; +#endif #else - /*rev 1.0*/ if (system_rev < 11) - return ; + return; /* rev 1.0 */ #endif #endif -#if defined(CONFIG_MACH_S2PLUS)\ -|| defined(CONFIG_TARGET_LOCALE_KOR)\ -|| defined(CONFIG_MACH_M0) || defined(CONFIG_MACH_C1VZW)\ -|| defined(CONFIG_MACH_C1) + +#if defined(CONFIG_TARGET_LOCALE_KOR) || \ + defined(CONFIG_MACH_M0) || \ + defined(CONFIG_MACH_C1) || \ + defined(CONFIG_MACH_M3) || \ + defined(CONFIG_MACH_T0) || \ + defined(CONFIG_MACH_BAFFIN) gpio_request(GPIO_3_TOUCH_EN, "gpio_3_touch_en"); #if defined(CONFIG_MACH_C1_KOR_LGT) gpio_request(GPIO_3_TOUCH_LDO_EN, "gpio_3_touch_ldo_en"); #endif #endif + gpio_request(GPIO_3_TOUCH_INT, "3_TOUCH_INT"); s3c_gpio_setpull(GPIO_3_TOUCH_INT, S3C_GPIO_PULL_NONE); s5p_register_gpio_interrupt(GPIO_3_TOUCH_INT); @@ -308,7 +332,6 @@ static void touchkey_init_hw(void) s3c_gpio_setpull(GPIO_3_TOUCH_SCL, S3C_GPIO_PULL_DOWN); s3c_gpio_setpull(GPIO_3_TOUCH_SDA, S3C_GPIO_PULL_DOWN); - } static int touchkey_suspend(void) @@ -321,10 +344,10 @@ static int touchkey_suspend(void) if (regulator_is_enabled(regulator)) regulator_force_disable(regulator); - #if defined(CONFIG_MACH_C1_KOR_LGT) +#if defined(CONFIG_MACH_C1_KOR_LGT) gpio_request(GPIO_3_TOUCH_LDO_EN, "gpio_3_touch_ldo_en"); gpio_direction_output(GPIO_3_TOUCH_LDO_EN, 0); - #endif +#endif s3c_gpio_setpull(GPIO_3_TOUCH_SCL, S3C_GPIO_PULL_DOWN); s3c_gpio_setpull(GPIO_3_TOUCH_SDA, S3C_GPIO_PULL_DOWN); @@ -360,7 +383,8 @@ static int touchkey_power_on(bool on) if (on) { gpio_direction_output(GPIO_3_TOUCH_INT, 1); - irq_set_irq_type(gpio_to_irq(GPIO_3_TOUCH_INT), IRQF_TRIGGER_FALLING); + irq_set_irq_type(gpio_to_irq(GPIO_3_TOUCH_INT), + IRQF_TRIGGER_FALLING); s3c_gpio_cfgpin(GPIO_3_TOUCH_INT, S3C_GPIO_SFN(0xf)); s3c_gpio_setpull(GPIO_3_TOUCH_INT, S3C_GPIO_PULL_NONE); } else @@ -421,8 +445,12 @@ static void tdmb_set_config_poweron(void) s3c_gpio_cfgpin(GPIO_TDMB_EN, S3C_GPIO_OUTPUT); s3c_gpio_setpull(GPIO_TDMB_EN, S3C_GPIO_PULL_NONE); gpio_set_value(GPIO_TDMB_EN, GPIO_LEVEL_LOW); - - s3c_gpio_cfgpin(GPIO_TDMB_INT, S3C_GPIO_SFN(GPIO_TDMB_INT_AF)); +#if defined(CONFIG_MACH_T0) + s3c_gpio_cfgpin(GPIO_TDMB_RST_N, S3C_GPIO_OUTPUT); + s3c_gpio_setpull(GPIO_TDMB_RST_N, S3C_GPIO_PULL_NONE); + gpio_set_value(GPIO_TDMB_RST_N, GPIO_LEVEL_LOW); +#endif + s3c_gpio_cfgpin(GPIO_TDMB_INT, S3C_GPIO_SFN(0xf)); s3c_gpio_setpull(GPIO_TDMB_INT, S3C_GPIO_PULL_NONE); s3c_gpio_cfgpin(GPIO_TDMB_SPI_CLK, S3C_GPIO_SFN(5)); @@ -438,6 +466,12 @@ static void tdmb_set_config_poweroff(void) s3c_gpio_setpull(GPIO_TDMB_EN, S3C_GPIO_PULL_NONE); gpio_set_value(GPIO_TDMB_EN, GPIO_LEVEL_LOW); +#if defined(CONFIG_MACH_T0) + s3c_gpio_cfgpin(GPIO_TDMB_RST_N, S3C_GPIO_OUTPUT); + s3c_gpio_setpull(GPIO_TDMB_RST_N, S3C_GPIO_PULL_NONE); + gpio_set_value(GPIO_TDMB_RST_N, GPIO_LEVEL_LOW); +#endif + s3c_gpio_cfgpin(GPIO_TDMB_INT, S3C_GPIO_OUTPUT); s3c_gpio_setpull(GPIO_TDMB_INT, S3C_GPIO_PULL_NONE); gpio_set_value(GPIO_TDMB_INT, GPIO_LEVEL_LOW); @@ -452,6 +486,15 @@ static void tdmb_gpio_on(void) gpio_set_value(GPIO_TDMB_EN, GPIO_LEVEL_LOW); usleep_range(1000, 1000); gpio_set_value(GPIO_TDMB_EN, GPIO_LEVEL_HIGH); + +#if defined(CONFIG_MACH_T0) + usleep_range(1000, 1000); + gpio_set_value(GPIO_TDMB_RST_N, GPIO_LEVEL_LOW); + usleep_range(2000, 2000); + gpio_set_value(GPIO_TDMB_RST_N, GPIO_LEVEL_HIGH); + usleep_range(1000, 1000); +#endif + } static void tdmb_gpio_off(void) @@ -459,6 +502,10 @@ static void tdmb_gpio_off(void) printk(KERN_DEBUG "tdmb_gpio_off\n"); tdmb_set_config_poweroff(); +#if defined(CONFIG_MACH_T0) + gpio_set_value(GPIO_TDMB_RST_N, GPIO_LEVEL_LOW); + usleep_range(1000, 1000); +#endif gpio_set_value(GPIO_TDMB_EN, GPIO_LEVEL_LOW); } @@ -478,92 +525,123 @@ static struct platform_device tdmb_device = { static int __init tdmb_dev_init(void) { +#if defined(CONFIG_MACH_T0) && defined(CONFIG_TDMB_ANT_DET) + unsigned int tdmb_ant_det_gpio; + unsigned int tdmb_ant_det_irq; + if (system_rev >= 6) { + tdmb_ant_det_gpio = GPIO_TDMB_ANT_DET_REV08; + tdmb_ant_det_irq = GPIO_TDMB_IRQ_ANT_DET_REV08; + } else { + s5p_register_gpio_interrupt(GPIO_TDMB_ANT_DET); + tdmb_ant_det_gpio = GPIO_TDMB_ANT_DET; + tdmb_ant_det_irq = GPIO_TDMB_IRQ_ANT_DET; + } + s3c_gpio_cfgpin(tdmb_ant_det_gpio, S3C_GPIO_SFN(0xf)); + s3c_gpio_setpull(tdmb_ant_det_gpio, S3C_GPIO_PULL_NONE); + tdmb_pdata.gpio_ant_det = tdmb_ant_det_gpio; + tdmb_pdata.irq_ant_det = tdmb_ant_det_irq; +#endif tdmb_set_config_poweroff(); + s5p_register_gpio_interrupt(GPIO_TDMB_INT); tdmb_pdata.irq = GPIO_TDMB_IRQ; platform_device_register(&tdmb_device); return 0; } -#endif +#elif defined(CONFIG_ISDBT) +static void isdbt_set_config_poweron(void) +{ + s3c_gpio_cfgpin(GPIO_ISDBT_EN, S3C_GPIO_OUTPUT); + s3c_gpio_setpull(GPIO_ISDBT_EN, S3C_GPIO_PULL_NONE); + gpio_set_value(GPIO_ISDBT_EN, GPIO_LEVEL_LOW); + s3c_gpio_cfgpin(GPIO_ISDBT_RST_N, S3C_GPIO_OUTPUT); + s3c_gpio_setpull(GPIO_ISDBT_RST_N, S3C_GPIO_PULL_NONE); + gpio_set_value(GPIO_ISDBT_RST_N, GPIO_LEVEL_LOW); + s3c_gpio_cfgpin(GPIO_ISDBT_INT, S3C_GPIO_SFN(GPIO_ISDBT_INT_AF)); + s3c_gpio_setpull(GPIO_ISDBT_INT, S3C_GPIO_PULL_NONE); + + s3c_gpio_cfgpin(GPIO_ISDBT_SPI_CLK, S3C_GPIO_SFN(5)); + s3c_gpio_cfgpin(GPIO_ISDBT_SPI_MISO, S3C_GPIO_SFN(5)); + s3c_gpio_cfgpin(GPIO_ISDBT_SPI_MOSI, S3C_GPIO_SFN(5)); + s3c_gpio_setpull(GPIO_ISDBT_SPI_CLK, S3C_GPIO_PULL_DOWN); + s3c_gpio_setpull(GPIO_ISDBT_SPI_MISO, S3C_GPIO_PULL_DOWN); + s3c_gpio_setpull(GPIO_ISDBT_SPI_MOSI, S3C_GPIO_PULL_DOWN); + + printk(KERN_DEBUG "isdbt_set_config_poweron\n"); -#if defined(CONFIG_PHONE_IPC_SPI) -static void ipc_spi_cfg_gpio(void); +} +static void isdbt_set_config_poweroff(void) +{ + s3c_gpio_cfgpin(GPIO_ISDBT_EN, S3C_GPIO_OUTPUT); + s3c_gpio_setpull(GPIO_ISDBT_EN, S3C_GPIO_PULL_NONE); + gpio_set_value(GPIO_ISDBT_EN, GPIO_LEVEL_LOW); -static struct ipc_spi_platform_data ipc_spi_data = { - .gpio_ipc_mrdy = GPIO_IPC_MRDY, - .gpio_ipc_srdy = GPIO_IPC_SRDY, - .gpio_ipc_sub_mrdy = GPIO_IPC_SUB_MRDY, - .gpio_ipc_sub_srdy = GPIO_IPC_SUB_SRDY, + s3c_gpio_cfgpin(GPIO_ISDBT_RST_N, S3C_GPIO_OUTPUT); + s3c_gpio_setpull(GPIO_ISDBT_RST_N, S3C_GPIO_PULL_NONE); + gpio_set_value(GPIO_ISDBT_RST_N, GPIO_LEVEL_LOW); - .cfg_gpio = ipc_spi_cfg_gpio, -}; + s3c_gpio_cfgpin(GPIO_ISDBT_INT, S3C_GPIO_OUTPUT); + s3c_gpio_setpull(GPIO_ISDBT_INT, S3C_GPIO_PULL_NONE); + gpio_set_value(GPIO_ISDBT_INT, GPIO_LEVEL_LOW); -static struct resource ipc_spi_res[] = { - [0] = { - .start = IRQ_IPC_SRDY, - .end = IRQ_IPC_SRDY, - .flags = IORESOURCE_IRQ, - }, -}; -static struct platform_device ipc_spi_device = { - .name = "onedram", - .id = -1, - .num_resources = ARRAY_SIZE(ipc_spi_res), - .resource = ipc_spi_res, - .dev = { - .platform_data = &ipc_spi_data, - }, -}; + printk(KERN_DEBUG "isdbt_set_config_poweroff\n"); +} -static void ipc_spi_cfg_gpio(void) +static void isdbt_gpio_on(void) { - int err = 0; + printk(KERN_DEBUG "isdbt_gpio_on\n"); - unsigned gpio_ipc_mrdy = ipc_spi_data.gpio_ipc_mrdy; - unsigned gpio_ipc_srdy = ipc_spi_data.gpio_ipc_srdy; - unsigned gpio_ipc_sub_mrdy = ipc_spi_data.gpio_ipc_sub_mrdy; - unsigned gpio_ipc_sub_srdy = ipc_spi_data.gpio_ipc_sub_srdy; + isdbt_set_config_poweron(); - err = gpio_request(gpio_ipc_mrdy, "IPC_MRDY"); - if (err) { - printk(KERN_ERR "ipc_spi_cfg_gpio - fail to request gpio %s : %d\n", - "IPC_MRDY", err); - } else { - gpio_direction_output(gpio_ipc_mrdy, 0); - } + gpio_set_value(GPIO_ISDBT_EN, GPIO_LEVEL_LOW); + usleep_range(1000, 1000); + gpio_set_value(GPIO_ISDBT_EN, GPIO_LEVEL_HIGH); - err = gpio_request(gpio_ipc_srdy, "IPC_SRDY"); - if (err) { - printk(KERN_ERR "ipc_spi_cfg_gpio - fail to request gpio %s : %d\n", - "IPC_SRDY", err); - } else { - gpio_direction_input(gpio_ipc_srdy); - s3c_gpio_cfgpin(gpio_ipc_srdy, S3C_GPIO_SFN(0xF)); - s3c_gpio_setpull(gpio_ipc_srdy, S3C_GPIO_PULL_DOWN); - } + usleep_range(1000, 1000); + gpio_set_value(GPIO_ISDBT_RST_N, GPIO_LEVEL_LOW); + usleep_range(2000, 2000); + gpio_set_value(GPIO_ISDBT_RST_N, GPIO_LEVEL_HIGH); + usleep_range(1000, 1000); - err = gpio_request(gpio_ipc_sub_mrdy, "IPC_SUB_MRDY"); - if (err) { - printk(KERN_ERR "ipc_spi_cfg_gpio - fail to request gpio %s : %d\n", - "IPC_SUB_MRDY", err); - } else { - gpio_direction_output(gpio_ipc_sub_mrdy, 0); - } +} - err = gpio_request(gpio_ipc_sub_srdy, "IPC_SUB_SRDY"); - if (err) { - printk(KERN_ERR "ipc_spi_cfg_gpio - fail to request gpio %s : %d\n", - "IPC_SUB_SRDY", err); - } else { - gpio_direction_input(gpio_ipc_sub_srdy); - s3c_gpio_cfgpin(gpio_ipc_sub_srdy, S3C_GPIO_SFN(0xF)); - s3c_gpio_setpull(gpio_ipc_sub_srdy, S3C_GPIO_PULL_DOWN); - } +static void isdbt_gpio_off(void) +{ + printk(KERN_DEBUG "isdbt_gpio_off\n"); - irq_set_irq_type(gpio_to_irq(GPIO_IPC_SRDY), IRQ_TYPE_EDGE_RISING); - irq_set_irq_type(gpio_to_irq(GPIO_IPC_SUB_SRDY), IRQ_TYPE_EDGE_RISING); + isdbt_set_config_poweroff(); + + gpio_set_value(GPIO_ISDBT_RST_N, GPIO_LEVEL_LOW); + usleep_range(1000, 1000); + + gpio_set_value(GPIO_ISDBT_EN, GPIO_LEVEL_LOW); +} + +static struct isdbt_platform_data isdbt_pdata = { + .gpio_on = isdbt_gpio_on, + .gpio_off = isdbt_gpio_off, +}; + +static struct platform_device isdbt_device = { + .name = "isdbt", + .id = -1, + .dev = { + .platform_data = &isdbt_pdata, + }, +}; + +static int __init isdbt_dev_init(void) +{ + isdbt_set_config_poweroff(); + s5p_register_gpio_interrupt(GPIO_ISDBT_INT); + isdbt_pdata.irq = GPIO_ISDBT_IRQ; + platform_device_register(&isdbt_device); + + printk(KERN_DEBUG "isdbt_dev_init\n"); + + return 0; } #endif @@ -747,7 +825,12 @@ static struct s3c_mshci_platdata exynos4_mshc_pdata __initdata = { .max_width = 8, .host_caps = MMC_CAP_8_BIT_DATA | MMC_CAP_1_8V_DDR | MMC_CAP_UHS_DDR50 | MMC_CAP_CMD23, - .host_caps2 = MMC_CAP2_PACKED_CMD, +#ifdef CONFIG_MMC_MSHCI_ENABLE_CACHE + .host_caps2 = MMC_CAP2_ADAPT_PACKED | MMC_CAP2_PACKED_CMD | + MMC_CAP2_CACHE_CTRL, +#else + .host_caps2 = MMC_CAP2_ADAPT_PACKED | MMC_CAP2_PACKED_CMD, +#endif #elif defined(CONFIG_EXYNOS4_MSHC_8BIT) .max_width = 8, .host_caps = MMC_CAP_8_BIT_DATA | MMC_CAP_CMD23, @@ -792,16 +875,20 @@ static void __init smdk4212_usbgadget_init(void) struct android_usb_platform_data *android_pdata = s3c_device_android_usb.dev.platform_data; if (android_pdata) { -#if defined(CONFIG_MACH_M0_CTC) - /*FOR CTC PC-MODEM START*/ - unsigned int newluns = 3; - /*FOR CTC PC-MODEM END*/ + unsigned int cdfs = 0; +#if defined(CONFIG_MACH_M0_CTC) || defined(CONFIG_MACH_T0_CHN_CTC) + unsigned int newluns = 1; + cdfs = 1; /* China CTC required CDFS */ +#elif defined(CONFIG_MACH_T0_USA_VZW) + unsigned int newluns = 0; + cdfs = 1; /* VZW required CDFS */ #else unsigned int newluns = 2; #endif printk(KERN_DEBUG "usb: %s: default luns=%d, new luns=%d\n", __func__, android_pdata->nluns, newluns); android_pdata->nluns = newluns; + android_pdata->cdfs_support = cdfs; } else { printk(KERN_DEBUG "usb: %s android_pdata is not available\n", __func__); @@ -810,7 +897,7 @@ static void __init smdk4212_usbgadget_init(void) s5p_usbgadget_set_platdata(pdata); #if defined(CONFIG_MACH_C1_KOR_SKT) || defined(CONFIG_MACH_C1_KOR_KT) || \ - defined(CONFIG_MACH_C1_KOR_LGT) + defined(CONFIG_MACH_C1_KOR_LGT) || defined(CONFIG_MACH_BAFFIN) pdata = s3c_device_usbgadget.dev.platform_data; if (pdata) { /* Squelch Threshold Tune [13:11] (111 : -20%) */ @@ -824,16 +911,58 @@ static void __init smdk4212_usbgadget_init(void) } #endif +#ifdef CONFIG_MACH_GC1 +static void motor_init_hw(void) +{ + if (gpio_request(EXYNOS4_GPD0(0), "VIBTONE_PWM") < 0) + printk(KERN_ERR "[VIB] gpio requst is failed\n"); + else { + gpio_direction_output(EXYNOS4_GPD0(0), 0); + printk(KERN_DEBUG "[VIB] gpio request is succeed\n"); + } +} + +static void motor_en(bool enable) +{ + gpio_direction_output(EXYNOS4_GPD0(0), enable); + printk(KERN_DEBUG "[VIB] motor_enabled GPIO GPD0(0) : %d\n", + gpio_get_value(EXYNOS4_GPD0(0))); +} +#endif +#ifdef CONFIG_MACH_BAFFIN +static void motor_en(bool enable) +{ + gpio_direction_output(EXYNOS4_GPD0(0), enable); + printk(KERN_DEBUG "[VIB] motor_enabled GPIO GPD0(0) : %d\n", + gpio_get_value(EXYNOS4_GPD0(0))); +} +#endif +#if defined(CONFIG_MACH_T0) && defined(CONFIG_TARGET_LOCALE_KOR) +static void motor_en(bool enable) +{ + gpio_direction_output(EXYNOS4_GPC0(3), enable); + printk(KERN_DEBUG "[VIB] motor_enabled GPIO GPC0(3) : %d\n", + gpio_get_value(EXYNOS4_GPC0(3))); +} +#endif + #ifdef CONFIG_MFD_MAX77693 #ifdef CONFIG_VIBETONZ static struct max77693_haptic_platform_data max77693_haptic_pdata = { - .max_timeout = 10000, - .duty = 37050, - .period = 38054, +#ifdef CONFIG_MACH_GC1 + .reg2 = MOTOR_ERM, + .pwm_id = 1, + .init_hw = motor_init_hw, + .motor_en = motor_en, +#else .reg2 = MOTOR_LRA | EXT_PWM | DIVIDER_128, + .pwm_id = 0, .init_hw = NULL, .motor_en = NULL, - .pwm_id = 0, +#endif + .max_timeout = 10000, + .duty = 35500, + .period = 37904, .regulator_name = "vmotor", }; #endif @@ -859,12 +988,12 @@ static struct max77693_led_platform_data max77693_led_pdata = { .leds[2].name = "torch-sec1", .leds[2].id = MAX77693_TORCH_LED_1, .leds[2].cntrl_mode = MAX77693_LED_CTRL_BY_FLASHSTB, - .leds[2].brightness = 0x0F, + .leds[2].brightness = 0x03, .leds[3].name = "torch-sec2", .leds[3].id = MAX77693_TORCH_LED_2, - .leds[3].cntrl_mode = MAX77693_LED_CTRL_BY_I2C, - .leds[3].brightness = 0x0F, + .leds[3].cntrl_mode = MAX77693_LED_CTRL_BY_FLASHSTB, + .leds[3].brightness = 0x04, }; #endif @@ -874,11 +1003,15 @@ static struct max77693_charger_platform_data max77693_charger_pdata = { #ifdef CONFIG_BATTERY_WPC_CHARGER .wpc_irq_gpio = GPIO_WPC_INT, #if defined(CONFIG_MACH_M0) || defined(CONFIG_MACH_C1) || \ - defined(CONFIG_MACH_C1VZW) + defined(CONFIG_MACH_M3) || defined(CONFIG_MACH_T0) .vbus_irq_gpio = GPIO_V_BUS_INT, #endif +#if defined(CONFIG_MACH_T0) + .wc_pwr_det = true, +#else .wc_pwr_det = false, #endif +#endif }; #endif @@ -898,10 +1031,6 @@ static bool is_muic_default_uart_path_cp(void) if (system_rev == 4) return true; #endif -#ifdef CONFIG_MACH_S2PLUS - if (system_rev >= 2) - return true; -#endif return false; } @@ -925,7 +1054,7 @@ struct max77693_platform_data exynos4_max77693_info = { }; #endif -#if defined(CONFIG_CHARGER_MAX8922_U1) || defined(CONFIG_CHARGER_MAX8922_S2PLUS) +#if defined(CONFIG_CHARGER_MAX8922_U1) static int max8922_cfg_gpio(void) { printk(KERN_INFO "[Battery] %s called.\n", __func__); @@ -955,7 +1084,7 @@ static struct platform_device max8922_device_charger = { .id = -1, .dev.platform_data = &max8922_pdata, }; -#endif /* CONFIG_CHARGER_MAX8922_U1 || CONFIG_CHARGER_MAX8922_S2PLUS */ +#endif /* CONFIG_CHARGER_MAX8922_U1 */ /* I2C0 */ static struct i2c_board_info i2c_devs0[] __initdata = { @@ -984,7 +1113,7 @@ static struct i2c_board_info i2c_devs5[] __initdata = { I2C_BOARD_INFO("s5p_ddc", (0x74 >> 1)), }, }; -#else +#elif !defined(CONFIG_MACH_T0_EUR_OPEN) || !defined(CONFIG_MACH_T0_CHN_OPEN) static struct i2c_board_info i2c_devs5[] __initdata = { #ifdef CONFIG_REGULATOR_MAX8997 { @@ -999,12 +1128,6 @@ static struct i2c_board_info i2c_devs5[] __initdata = { I2C_BOARD_INFO("max77686", (0x12 >> 1)), .platform_data = &exynos4_max77686_info, }, -#elif defined(CONFIG_REGULATOR_S5M8767) - /* s5m on i2c5 other than M1 board */ - { - I2C_BOARD_INFO("s5m87xx", (0x12 >> 1)), - .platform_data = &exynos4_s5m8767_info, - }, #endif }; #endif /* CONFIG_MACH_GC1 */ @@ -1040,6 +1163,26 @@ struct s3c2410_platform_i2c default_i2c5_data __initdata = { #endif +#ifdef CONFIG_S3C_DEV_I2C6 +static struct i2c_board_info i2c_devs6[] __initdata = { +}; +#if defined(CONFIG_MACH_T0_EUR_OPEN) || defined(CONFIG_MACH_T0_CHN_OPEN) +static void i2c6_mhl_ddc_cfg_gpio(struct platform_device *dev) +{ + s3c_gpio_cfgall_range(EXYNOS4_GPC1(3), 2, + S3C_GPIO_SFN(4), S3C_GPIO_PULL_NONE); +} +struct s3c2410_platform_i2c default_i2c6_data __initdata = { + .bus_num = 6, + .flags = 0, + .slave_addr = 0x10, + .frequency = 100*1000, + .sda_delay = 100, + .cfg_gpio = i2c6_mhl_ddc_cfg_gpio, +}; +#endif /* CONFIG_MACH_T0_EUR_OPEN */ +#endif /* CONFIG_S3C_DEV_I2C6 */ + #ifdef CONFIG_MACH_GC1 static struct i2c_board_info i2c_devs7[] __initdata = { { @@ -1055,9 +1198,10 @@ static struct i2c_board_info i2c_devs7_s5m[] __initdata = { }; #else static struct i2c_board_info i2c_devs7[] __initdata = { -#if defined(CONFIG_MACH_C1) || defined(CONFIG_MACH_C1VZW) || \ - defined(CONFIG_MACH_JENGA) || defined(CONFIG_MACH_S2PLUS) || \ - defined(CONFIG_MACH_M0) || defined(CONFIG_MACH_M3) +#if defined(CONFIG_MACH_C1) || \ + defined(CONFIG_MACH_M3) || \ + defined(CONFIG_MACH_M0) || defined(CONFIG_MACH_T0) || \ + defined(CONFIG_MACH_BAFFIN) #if defined(CONFIG_REGULATOR_MAX77686) /* max77686 on i2c7 with M1 board */ { I2C_BOARD_INFO("max77686", (0x12 >> 1)), @@ -1084,7 +1228,6 @@ static struct platform_device bcm4334_bluetooth_device = { }; #endif -#if !defined(CONFIG_MACH_M0_GRANDECTC) static struct i2c_gpio_platform_data gpio_i2c_data8 = { .sda_pin = GPIO_3_TOUCH_SDA, .scl_pin = GPIO_3_TOUCH_SCL, @@ -1095,7 +1238,6 @@ struct platform_device s3c_device_i2c8 = { .id = 8, .dev.platform_data = &gpio_i2c_data8, }; -#endif /* I2C8 */ static struct i2c_board_info i2c_devs8_emul[] = { @@ -1120,29 +1262,12 @@ static struct i2c_board_info i2c_devs11_emul[] __initdata = { }; /* I2C12 */ -#if defined(CONFIG_PN65N_NFC) && !defined(CONFIG_MACH_C1) \ - && !defined(CONFIG_MACH_C1VZW) && !defined(CONFIG_MACH_M3) +#if defined(CONFIG_PN65N_NFC) && \ + !defined(CONFIG_MACH_C1) && !defined(CONFIG_MACH_BAFFIN) static struct i2c_board_info i2c_devs12_emul[] __initdata = { }; #endif -#if defined(CONFIG_MACH_S2PLUS) -static struct i2c_gpio_platform_data gpio_i2c_data13 = { - .sda_pin = GPIO_VT_CAM_SDA_18V, - .scl_pin = GPIO_VT_CAM_SCL_18V, -}; - -struct platform_device s3c_device_i2c13 = { - .name = "i2c-gpio", - .id = 13, - .dev.platform_data = &gpio_i2c_data13, -}; - -/* I2C13 */ -static struct i2c_board_info i2c_devs13_emul[] __initdata = { -}; -#endif - #ifdef CONFIG_BATTERY_MAX17047_FUELGAUGE static struct i2c_gpio_platform_data gpio_i2c_data14 = { .sda_pin = GPIO_FUEL_SDA, @@ -1168,7 +1293,7 @@ static struct i2c_board_info i2c_devs14_emul[] __initdata = { }; #endif -#if !defined(CONFIG_MACH_M0_GRANDECTC) +#ifdef CONFIG_SAMSUNG_MHL /* I2C15 */ static struct i2c_gpio_platform_data gpio_i2c_data15 = { .sda_pin = GPIO_MHL_SDA_1_8V, @@ -1189,6 +1314,7 @@ static struct i2c_board_info i2c_devs15_emul[] __initdata = { }; /* I2C16 */ +#if !defined(CONFIG_MACH_T0) && !defined(CONFIG_MACH_M3) static struct i2c_gpio_platform_data gpio_i2c_data16 = { .sda_pin = GPIO_MHL_DSDA_2_8V, .scl_pin = GPIO_MHL_DSCL_2_8V, @@ -1199,15 +1325,17 @@ struct platform_device s3c_device_i2c16 = { .id = 16, .dev.platform_data = &gpio_i2c_data16, }; +#endif /* !defined(CONFIG_MACH_T0) */ static struct i2c_board_info i2c_devs16_emul[] __initdata = { }; #endif -#if defined(CONFIG_MACH_C1) || defined(CONFIG_MACH_C1VZW) || \ - defined(CONFIG_MACH_JENGA) || defined(CONFIG_MACH_S2PLUS) || \ - defined(CONFIG_MACH_M0) || defined(CONFIG_MACH_M3) || \ - defined(CONFIG_MACH_GC1) +#if defined(CONFIG_MACH_C1) || \ + defined(CONFIG_MACH_M3) || \ + defined(CONFIG_MACH_M0) || \ + defined(CONFIG_MACH_GC1) || defined(CONFIG_MACH_T0) || \ + defined(CONFIG_MACH_BAFFIN) static struct i2c_gpio_platform_data gpio_i2c_data17 = { .sda_pin = GPIO_IF_PMIC_SDA, .scl_pin = GPIO_IF_PMIC_SCL, @@ -1231,9 +1359,9 @@ static struct i2c_board_info i2c_devs17_emul[] __initdata = { #endif #if 0 -#if defined(CONFIG_MACH_C1) || defined(CONFIG_MACH_C1VZW) || \ - defined(CONFIG_MACH_JENGA) || defined(CONFIG_MACH_S2PLUS) || \ - defined(CONFIG_MACH_M0) || defined(CONFIG_MACH_M3) +#if defined(CONFIG_MACH_C1) || \ + defined(CONFIG_MACH_M3) || \ + defined(CONFIG_MACH_M0) static struct i2c_gpio_platform_data i2c18_platdata = { .sda_pin = GPIO_8M_CAM_SDA_18V, .scl_pin = GPIO_8M_CAM_SCL_18V, @@ -1255,44 +1383,8 @@ static struct platform_device s3c_device_i2c18 = { #endif #endif -#if defined(CONFIG_STMPE811_ADC) || defined(CONFIG_FM_SI4709_MODULE) \ - || defined(CONFIG_FM_SI4705_MODULE) -static struct i2c_gpio_platform_data gpio_i2c_data19 = { - .sda_pin = GPIO_ADC_SDA, - .scl_pin = GPIO_ADC_SCL, -}; - -struct platform_device s3c_device_i2c19 = { - .name = "i2c-gpio", - .id = 19, - .dev.platform_data = &gpio_i2c_data19, -}; - - -/* I2C19 */ -static struct i2c_board_info i2c_devs19_emul[] __initdata = { -#if defined(CONFIG_STMPE811_ADC) - { - I2C_BOARD_INFO("stmpe811-adc", (0x82 >> 1)), - .platform_data = &stmpe811_pdata, - }, -#endif -#ifdef CONFIG_FM_SI4705_MODULE - { - I2C_BOARD_INFO("Si4709", (0x22 >> 1)), - }, -#endif -#ifdef CONFIG_FM_SI4709_MODULE - { - I2C_BOARD_INFO("Si4709", (0x20 >> 1)), - }, -#endif - -}; -#endif - /* I2C21 */ -#ifdef CONFIG_LEDS_AN30259A +#if defined(CONFIG_LEDS_AN30259A) || defined(CONFIG_LEDS_LP5521) static struct i2c_gpio_platform_data gpio_i2c_data21 = { .scl_pin = GPIO_S_LED_I2C_SCL, .sda_pin = GPIO_S_LED_I2C_SDA, @@ -1314,6 +1406,57 @@ static struct i2c_board_info i2c_devs21_emul[] __initdata = { }; #endif +/* I2C22 */ +#if defined (CONFIG_BARCODE_EMUL_ICE4) +static struct i2c_gpio_platform_data gpio_i2c_data22 = { + .scl_pin = GPIO_BARCODE_SCL_1_8V, + .sda_pin = GPIO_BARCODE_SDA_1_8V, +}; + +struct platform_device s3c_device_i2c22 = { + .name = "i2c-gpio", + .id = 22, + .dev.platform_data = &gpio_i2c_data22, +}; + +static struct i2c_board_info i2c_devs22_emul[] __initdata = { + { + I2C_BOARD_INFO("ice4", (0x6c)), + }, +}; +#endif + +#if defined(CONFIG_FELICA) + +#define FELICA_GPIO_RFS_NAME "FeliCa-RFS" +#define FELICA_GPIO_PON_NAME "FeliCa-PON" +#define FELICA_GPIO_INT_NAME "FeliCa-INT" +#define FELICA_GPIO_I2C_SDA_NAME "FeliCa-SDA" +#define FELICA_GPIO_I2C_SCL_NAME "FeliCa-SCL" + +static struct i2c_gpio_platform_data i2c30_gpio_platdata = { + .sda_pin = FELICA_GPIO_I2C_SDA, + .scl_pin = FELICA_GPIO_I2C_SCL, + .udelay = 0, + .sda_is_open_drain = 0, + .scl_is_open_drain = 0, + .scl_is_output_only = 0 +}; + +static struct platform_device s3c_device_i2c30 = { + .name = "i2c-gpio", + .id = 30, /* adepter number */ + .dev.platform_data = &i2c30_gpio_platdata, +}; + +static struct i2c_board_info i2c_devs30[] __initdata = { + { + I2C_BOARD_INFO("felica_i2c", (0x56 >> 1)), + }, +}; + +#endif /* CONFIG_FELICA */ + #ifdef CONFIG_ANDROID_RAM_CONSOLE static struct resource ram_console_resource[] = { { @@ -1352,33 +1495,50 @@ static int __init setup_ram_console_mem(char *str) __setup("ram_console=", setup_ram_console_mem); #endif -#if defined(CONFIG_BATTERY_SAMSUNG) || defined(CONFIG_BATTERY_SAMSUNG_S2PLUS) +#if defined(CONFIG_BATTERY_SAMSUNG) static struct samsung_battery_platform_data samsung_battery_pdata = { .charger_name = "max77693-charger", .fuelgauge_name = "max17047-fuelgauge", -#if defined(CONFIG_CHARGER_MAX8922_U1) || defined(CONFIG_CHARGER_MAX8922_S2PLUS) +#if defined(CONFIG_CHARGER_MAX8922_U1) .sub_charger_name = "max8922-charger", -#if defined(CONFIG_CHARGER_MAX8922_S2PLUS) - .use_sub_charger = true, #endif -#endif -#if defined(CONFIG_BATTERY_SAMSUNG_S2PLUS) +#if defined(CONFIG_MACH_GC1) .voltage_max = 4200000, #else .voltage_max = 4350000, #endif .voltage_min = 3400000, - .in_curr_limit = 1000, #if defined(CONFIG_MACH_GC1) + .in_curr_limit = 700, .chg_curr_ta = 700, + .chg_curr_dock = 700, + .chg_curr_siop_lv1 = 475, + .chg_curr_siop_lv2 = 475, + .chg_curr_siop_lv3 = 475, +#elif defined(CONFIG_MACH_T0) + .in_curr_limit = 1800, + .chg_curr_ta = 1700, + .chg_curr_dock = 1700, + .chg_curr_siop_lv1 = 1000, + .chg_curr_siop_lv2 = 475, + .chg_curr_siop_lv3 = 1, /* zero make charger off */ #else + .in_curr_limit = 1000, .chg_curr_ta = 1000, + .chg_curr_dock = 1000, + .chg_curr_siop_lv1 = 475, + .chg_curr_siop_lv2 = 475, + .chg_curr_siop_lv3 = 475, #endif + .chg_curr_usb = 475, .chg_curr_cdp = 1000, +#if defined(CONFIG_MACH_T0_USA_VZW) + .chg_curr_wpc = 650, +#else .chg_curr_wpc = 475, - .chg_curr_dock = 1000, +#endif .chg_curr_etc = 475, .chng_interval = 30, @@ -1388,13 +1548,16 @@ static struct samsung_battery_platform_data samsung_battery_pdata = { .emer_lv1_interval = 30, .emer_lv2_interval = 10, -#if defined(CONFIG_BATTERY_SAMSUNG_S2PLUS) +#if defined(CONFIG_MACH_GC1) .recharge_voltage = 4150000, #else - .recharge_voltage = 4300000, /* it will be cacaluated in probe */ + /* it will be cacaluated in probe */ + .recharge_voltage = 4300000, #endif -#if defined(CONFIG_TARGET_LOCALE_KOR) || defined(CONFIG_MACH_M0_CTC) +#if defined(CONFIG_TARGET_LOCALE_KOR) || defined(CONFIG_MACH_M0_CTC) || \ + defined(CONFIG_MACH_T0_USA_VZW) || defined(CONFIG_MACH_T0_USA_SPR) || \ + defined(CONFIG_MACH_T0_USA_USCC) .abstimer_charge_duration = 8 * 60 * 60, .abstimer_charge_duration_wpc = 8 * 60 * 60, .abstimer_recharge_duration = 2 * 60 * 60, @@ -1414,40 +1577,155 @@ static struct samsung_battery_platform_data samsung_battery_pdata = { #elif defined(CONFIG_MACH_C1_KOR_LGT) .overheat_stop_temp = 630, .overheat_recovery_temp = 430, - .freeze_stop_temp = -50, + .freeze_stop_temp = -70, .freeze_recovery_temp = 0, #elif defined(CONFIG_MACH_M0_KOR_SKT) || defined(CONFIG_MACH_M0_KOR_KT) .overheat_stop_temp = 710, .overheat_recovery_temp = 430, .freeze_stop_temp = -40, .freeze_recovery_temp = 30, +#elif defined(CONFIG_MACH_T0_KOR_SKT) || defined(CONFIG_MACH_T0_KOR_KT) || \ + defined(CONFIG_MACH_T0_KOR_LGT) + .overheat_stop_temp = 650, + .overheat_recovery_temp = 425, + .freeze_stop_temp = -45, + .freeze_recovery_temp = 3, #else .overheat_stop_temp = 600, .overheat_recovery_temp = 430, .freeze_stop_temp = -50, .freeze_recovery_temp = 0, #endif /* KOR model */ +#elif defined(CONFIG_TARGET_LOCALE_USA) +#if defined(CONFIG_MACH_C1_USA_ATT) + .overheat_stop_temp = 450, + .overheat_recovery_temp = 400, + .freeze_stop_temp = -50, + .freeze_recovery_temp = 0, +#elif defined(CONFIG_MACH_M3_USA_VZW) + .overheat_stop_temp = 477, + .overheat_recovery_temp = 420, + .freeze_stop_temp = -50, + .freeze_recovery_temp = 0, +#elif defined(CONFIG_MACH_T0_USA_ATT) + .overheat_stop_temp = 475, + .overheat_recovery_temp = 400, + .freeze_stop_temp = -50, + .freeze_recovery_temp = 0, +#elif defined(CONFIG_MACH_T0_USA_VZW) + .overheat_stop_temp = 515, + .overheat_recovery_temp = 440, + .freeze_stop_temp = -50, + .freeze_recovery_temp = 0, +#elif defined(CONFIG_MACH_T0_USA_SPR) + .overheat_stop_temp = 485, + .overheat_recovery_temp = 409, + .freeze_stop_temp = -50, + .freeze_recovery_temp = 0, +#elif defined(CONFIG_MACH_T0_USA_USCC) + .overheat_stop_temp = 600, + .overheat_recovery_temp = 400, + .freeze_stop_temp = -50, + .freeze_recovery_temp = 0, +#else + /* USA default */ + .overheat_stop_temp = 450, + .overheat_recovery_temp = 400, + .freeze_stop_temp = -50, + .freeze_recovery_temp = 0, +#endif #elif defined(CONFIG_MACH_M0_CTC) .overheat_stop_temp = 640, - .overheat_recovery_temp = 400, + .overheat_recovery_temp = 430, .freeze_stop_temp = -50, .freeze_recovery_temp = 30, +#elif defined(CONFIG_MACH_GC1) + .overheat_stop_temp = 600, + .overheat_recovery_temp = 400, + .freeze_stop_temp = -30, + .freeze_recovery_temp = 0, #else + /* M0 EUR */ .overheat_stop_temp = 600, .overheat_recovery_temp = 400, .freeze_stop_temp = -50, .freeze_recovery_temp = 0, #endif + /* CTIA spec */ +#if defined(CONFIG_TARGET_LOCALE_USA) && !defined(CONFIG_MACH_T0_USA_USCC) + .ctia_spec = true, +#else + .ctia_spec = false, +#endif + + /* CTIA temperature spec */ + .event_time = 10 * 60, +#if defined(CONFIG_MACH_C1_USA_ATT) + .event_overheat_stop_temp = 600, + .event_overheat_recovery_temp = 400, + .event_freeze_stop_temp = -50, + .event_freeze_recovery_temp = 0, + .lpm_overheat_stop_temp = 480, + .lpm_overheat_recovery_temp = 450, + .lpm_freeze_stop_temp = -50, + .lpm_freeze_recovery_temp = 0, +#elif defined(CONFIG_MACH_M3_USA_VZW) + .event_overheat_stop_temp = 600, + .event_overheat_recovery_temp = 400, + .event_freeze_stop_temp = -50, + .event_freeze_recovery_temp = 0, + .lpm_overheat_stop_temp = 480, + .lpm_overheat_recovery_temp = 450, + .lpm_freeze_stop_temp = -50, + .lpm_freeze_recovery_temp = 0, +#elif defined(CONFIG_MACH_T0_USA_VZW) + .event_overheat_stop_temp = 600, + .event_overheat_recovery_temp = 409, + .event_freeze_stop_temp = -50, + .event_freeze_recovery_temp = 0, + .lpm_overheat_stop_temp = 480, + .lpm_overheat_recovery_temp = 450, + .lpm_freeze_stop_temp = -50, + .lpm_freeze_recovery_temp = 0, +#else + /* USA default */ + .event_overheat_stop_temp = 600, + .event_overheat_recovery_temp = 400, + .event_freeze_stop_temp = -50, + .event_freeze_recovery_temp = 0, + .lpm_overheat_stop_temp = 480, + .lpm_overheat_recovery_temp = 450, + .lpm_freeze_stop_temp = -50, + .lpm_freeze_recovery_temp = 0, +#endif + .temper_src = TEMPER_AP_ADC, - .temper_ch = 2, + .temper_ch = 2, /* if src == TEMPER_AP_ADC */ #ifdef CONFIG_S3C_ADC - /* s3c adc driver does not convert raw adc data. + /* + * s3c adc driver does not convert raw adc data. * so, register convert function. */ .covert_adc = convert_adc, #endif +#if defined(CONFIG_MACH_M3_USA_VZW) + .vf_det_src = VF_DET_UNKNOWN, +#else +#if defined(CONFIG_MACH_T0) && defined(CONFIG_TARGET_LOCALE_USA) + .vf_det_src = VF_DET_GPIO, /* check H/W rev in battery probe */ +#else + .vf_det_src = VF_DET_CHARGER, +#endif +#endif + .vf_det_ch = 0, /* if src == VF_DET_ADC */ + .vf_det_th_l = 100, + .vf_det_th_h = 600, +#if defined(CONFIG_MACH_T0) && defined(CONFIG_TARGET_LOCALE_USA) + .batt_present_gpio = GPIO_BATT_PRESENT_N_INT, +#endif + .suspend_chging = true, .led_indicator = false, @@ -1478,18 +1756,6 @@ struct gpio_keys_button midas_buttons[] = { #if defined(CONFIG_MACH_GC1) GPIO_KEYS(KEY_POWER, GPIO_nPOWER, 1, 1, sec_debug_check_crash_key), - GPIO_KEYS(KEY_RECORD, GPIO_RECORD_KEY, - 1, 1, sec_debug_check_crash_key), -#if 0 - GPIO_KEYS(KEY_HOMEPAGE, GPIO_OK_KEY_ANDROID, - 1, 1, sec_debug_check_crash_key), - GPIO_KEYS(KEY_MENU, GPIO_MENU_KEY, - 1, 1, sec_debug_check_crash_key), - GPIO_KEYS(KEY_BACK, GPIO_BACK_KEY, - 1, 1, sec_debug_check_crash_key), -#endif - GPIO_KEYS(KEY_PLAY, GPIO_PLAY_KEY, - 1, 1, sec_debug_check_crash_key), GPIO_KEYS(KEY_CAMERA_FOCUS, GPIO_S1_KEY, 1, 1, sec_debug_check_crash_key), /*KEY_CAMERA_SHUTTER*/ @@ -1499,6 +1765,18 @@ struct gpio_keys_button midas_buttons[] = { 1, 1, sec_debug_check_crash_key), GPIO_KEYS(KEY_CAMERA_ZOOMOUT, GPIO_WIDE_KEY, 1, 1, sec_debug_check_crash_key), + GPIO_KEYS(0x221, GPIO_FAST_TELE_KEY, + 1, 1, sec_debug_check_crash_key), + GPIO_KEYS(0x222, GPIO_FAST_WIDE_KEY, + 1, 1, sec_debug_check_crash_key), +#if 0 + GPIO_KEYS(KEY_HOMEPAGE, GPIO_OK_KEY_ANDROID, + 1, 1, sec_debug_check_crash_key), + GPIO_KEYS(KEY_MENU, GPIO_MENU_KEY, + 1, 1, sec_debug_check_crash_key), + GPIO_KEYS(KEY_BACK, GPIO_BACK_KEY, + 1, 1, sec_debug_check_crash_key), +#endif #else GPIO_KEYS(KEY_VOLUMEUP, GPIO_VOL_UP, 1, 0, sec_debug_check_crash_key), @@ -1509,6 +1787,7 @@ struct gpio_keys_button midas_buttons[] = { #endif }; +#if !defined(CONFIG_MACH_T0) && !defined(CONFIG_MACH_M3) struct gpio_keys_button m0_buttons[] = { GPIO_KEYS(KEY_VOLUMEUP, GPIO_VOL_UP_00, 1, 0, sec_debug_check_crash_key), @@ -1516,13 +1795,10 @@ struct gpio_keys_button m0_buttons[] = { 1, 0, sec_debug_check_crash_key), GPIO_KEYS(KEY_POWER, GPIO_nPOWER, 1, 1, sec_debug_check_crash_key), -#if defined(CONFIG_MACH_S2PLUS) - GPIO_KEYS(KEY_HOME, GPIO_OK_KEY, - 1, 1, sec_debug_check_crash_key), -#endif }; +#endif -#if defined(CONFIG_MACH_M0) || defined(CONFIG_MACH_C1VZW) || \ +#if defined(CONFIG_MACH_M0) || \ defined(CONFIG_MACH_C1_USA_ATT) struct gpio_keys_button m0_rev11_buttons[] = { GPIO_KEYS(KEY_VOLUMEUP, GPIO_VOL_UP_00, @@ -1536,7 +1812,9 @@ struct gpio_keys_button m0_rev11_buttons[] = { }; #endif -#if defined(CONFIG_TARGET_LOCALE_KOR) +#if defined(CONFIG_TARGET_LOCALE_KOR) && \ + (defined(CONFIG_MACH_M0) || defined(CONFIG_MACH_C1) ||\ + defined(CONFIG_MACH_BAFFIN)) struct gpio_keys_button c1_rev04_buttons[] = { GPIO_KEYS(KEY_VOLUMEUP, GPIO_VOL_UP_00, 1, 0, sec_debug_check_crash_key), @@ -1549,6 +1827,19 @@ struct gpio_keys_button c1_rev04_buttons[] = { }; #endif +#if defined(CONFIG_MACH_T0) || defined(CONFIG_MACH_M3) +struct gpio_keys_button t0_buttons[] = { + GPIO_KEYS(KEY_VOLUMEUP, GPIO_VOL_UP, + 1, 0, sec_debug_check_crash_key), + GPIO_KEYS(KEY_VOLUMEDOWN, GPIO_VOL_DOWN, + 1, 0, sec_debug_check_crash_key), + GPIO_KEYS(KEY_POWER, GPIO_nPOWER, + 1, 1, sec_debug_check_crash_key), + GPIO_KEYS(KEY_HOMEPAGE, GPIO_OK_KEY, + 1, 1, sec_debug_check_crash_key), +}; +#endif + struct gpio_keys_platform_data midas_gpiokeys_platform_data = { midas_buttons, ARRAY_SIZE(midas_buttons), @@ -1561,6 +1852,8 @@ static struct platform_device midas_keypad = { }, }; + + #ifdef CONFIG_VIDEO_FIMG2D static struct fimg2d_platdata fimg2d_data __initdata = { .hw_ver = 0x41, @@ -1635,6 +1928,23 @@ static struct platform_device s3c_device_i2c10 = { }; #endif +#ifdef CONFIG_SENSORS_AK8963C +static struct i2c_gpio_platform_data i2c10_platdata = { + .sda_pin = GPIO_MSENSOR_SDA_18V, + .scl_pin = GPIO_MSENSOR_SCL_18V, + .udelay = 2, /* 250KHz */ + .sda_is_open_drain = 0, + .scl_is_open_drain = 0, + .scl_is_output_only = 0, +}; + +static struct platform_device s3c_device_i2c10 = { + .name = "i2c-gpio", + .id = 10, + .dev.platform_data = &i2c10_platdata, +}; +#endif + #ifdef CONFIG_SENSORS_LPS331 static struct i2c_gpio_platform_data i2c11_platdata = { .sda_pin = GPIO_BSENSE_SDA_18V, @@ -1652,8 +1962,8 @@ static struct platform_device s3c_device_i2c11 = { }; #endif -#if defined(CONFIG_PN65N_NFC) && !defined(CONFIG_MACH_C1) \ - && !defined(CONFIG_MACH_C1VZW) && !defined(CONFIG_MACH_M3) +#if defined(CONFIG_PN65N_NFC) && \ + !defined(CONFIG_MACH_C1) && !defined(CONFIG_MACH_BAFFIN) static struct i2c_gpio_platform_data i2c12_platdata = { .sda_pin = GPIO_NFC_SDA_18V, .scl_pin = GPIO_NFC_SCL_18V, @@ -1674,11 +1984,14 @@ static struct platform_device s3c_device_i2c12 = { static void otg_accessory_power(int enable) { u8 on = (u8)!!enable; + int err; /* max77693 otg power control */ otg_control(enable); - gpio_request(GPIO_OTG_EN, "USB_OTG_EN"); + err = gpio_request(GPIO_OTG_EN, "USB_OTG_EN"); + if (err) + printk(KERN_ERR "failed to request USB_OTG_EN\n"); gpio_direction_output(GPIO_OTG_EN, on); gpio_free(GPIO_OTG_EN); pr_info("%s: otg accessory power = %d\n", __func__, on); @@ -1713,6 +2026,76 @@ static struct platform_device watchdog_reset_device = { }; #endif +#ifdef CONFIG_CORESIGHT_ETM + +#define CORESIGHT_PHYS_BASE 0x10880000 +#define CORESIGHT_ETB_PHYS_BASE (CORESIGHT_PHYS_BASE + 0x1000) +#define CORESIGHT_TPIU_PHYS_BASE (CORESIGHT_PHYS_BASE + 0x3000) +#define CORESIGHT_FUNNEL_PHYS_BASE (CORESIGHT_PHYS_BASE + 0x4000) +#define CORESIGHT_ETM_PHYS_BASE (CORESIGHT_PHYS_BASE + 0x1C000) + +static struct resource coresight_etb_resources[] = { + { + .start = CORESIGHT_ETB_PHYS_BASE, + .end = CORESIGHT_ETB_PHYS_BASE + SZ_4K - 1, + .flags = IORESOURCE_MEM, + }, +}; + +struct platform_device coresight_etb_device = { + .name = "coresight_etb", + .id = -1, + .num_resources = ARRAY_SIZE(coresight_etb_resources), + .resource = coresight_etb_resources, +}; + +static struct resource coresight_tpiu_resources[] = { + { + .start = CORESIGHT_TPIU_PHYS_BASE, + .end = CORESIGHT_TPIU_PHYS_BASE + SZ_4K - 1, + .flags = IORESOURCE_MEM, + }, +}; + +struct platform_device coresight_tpiu_device = { + .name = "coresight_tpiu", + .id = -1, + .num_resources = ARRAY_SIZE(coresight_tpiu_resources), + .resource = coresight_tpiu_resources, +}; + +static struct resource coresight_funnel_resources[] = { + { + .start = CORESIGHT_FUNNEL_PHYS_BASE, + .end = CORESIGHT_FUNNEL_PHYS_BASE + SZ_4K - 1, + .flags = IORESOURCE_MEM, + }, +}; + +struct platform_device coresight_funnel_device = { + .name = "coresight_funnel", + .id = -1, + .num_resources = ARRAY_SIZE(coresight_funnel_resources), + .resource = coresight_funnel_resources, +}; + +static struct resource coresight_etm_resources[] = { + { + .start = CORESIGHT_ETM_PHYS_BASE, + .end = CORESIGHT_ETM_PHYS_BASE + (SZ_4K * 4) - 1, + .flags = IORESOURCE_MEM, + }, +}; + +struct platform_device coresight_etm_device = { + .name = "coresight_etm", + .id = -1, + .num_resources = ARRAY_SIZE(coresight_etm_resources), + .resource = coresight_etm_resources, +}; + +#endif + static struct platform_device *midas_devices[] __initdata = { #ifdef CONFIG_SEC_WATCHDOG_RESET &watchdog_reset_device, @@ -1759,57 +2142,76 @@ static struct platform_device *midas_devices[] __initdata = { &s3c_device_i2c0, &s3c_device_i2c1, +#ifdef CONFIG_S3C_DEV_I2C2 + &s3c_device_i2c2, +#endif &s3c_device_i2c3, #ifdef CONFIG_S3C_DEV_I2C4 &s3c_device_i2c4, #endif /* &s3c_device_i2c5, */ -#ifdef CONFIG_AUDIENCE_ES305 +#if defined(CONFIG_AUDIENCE_ES305) || defined(CONFIG_MACH_T0_EUR_OPEN) || defined(CONFIG_MACH_T0_CHN_OPEN) &s3c_device_i2c6, #endif &s3c_device_i2c7, -#if !defined(CONFIG_MACH_M0_GRANDECTC) &s3c_device_i2c8, -#endif &s3c_device_i2c9, #ifdef CONFIG_SENSORS_AK8975C &s3c_device_i2c10, #endif +#ifdef CONFIG_SENSORS_AK8963C + &s3c_device_i2c10, +#endif + #ifdef CONFIG_SENSORS_LPS331 &s3c_device_i2c11, #endif /* &s3c_device_i2c12, */ -#if defined(CONFIG_MACH_S2PLUS) - &s3c_device_i2c13, -#endif #ifdef CONFIG_BATTERY_MAX17047_FUELGAUGE &s3c_device_i2c14, /* max17047-fuelgauge */ #endif #ifdef CONFIG_SAMSUNG_MHL &s3c_device_i2c15, +#if !defined(CONFIG_MACH_T0) && !defined(CONFIG_MACH_M3) &s3c_device_i2c16, #endif -#if defined(CONFIG_MACH_C1) || defined(CONFIG_MACH_C1VZW) || \ - defined(CONFIG_MACH_JENGA) || defined(CONFIG_MACH_S2PLUS) || \ - defined(CONFIG_MACH_M0) || defined(CONFIG_MACH_M3) || \ - defined(CONFIG_MACH_GC1) +#endif /* CONFIG_SAMSUNG_MHL */ +#if defined(CONFIG_MACH_C1) || \ + defined(CONFIG_MACH_M3) || \ + defined(CONFIG_MACH_M0) || \ + defined(CONFIG_MACH_GC1) || defined(CONFIG_MACH_T0) || \ + defined(CONFIG_MACH_BAFFIN) &s3c_device_i2c17, #if 0 &s3c_device_i2c18, #endif #endif -#ifdef CONFIG_LEDS_AN30259A +#if defined(CONFIG_LEDS_AN30259A) || defined(CONFIG_LEDS_LP5521) &s3c_device_i2c21, #endif +#if defined (CONFIG_BARCODE_EMUL_ICE4) + &s3c_device_i2c22, +#endif +#if defined(CONFIG_FELICA) + &s3c_device_i2c30, +#endif -#if defined CONFIG_USB_EHCI_S5P && !defined CONFIG_LINK_DEVICE_HSIC +#if defined CONFIG_USB_EHCI_S5P +#if defined(CONFIG_LINK_DEVICE_HSIC) || defined(CONFIG_LINK_DEVICE_USB) +#else &s5p_device_ehci, #endif -#if defined CONFIG_USB_OHCI_S5P && !defined CONFIG_LINK_DEVICE_HSIC +#endif + +#if defined CONFIG_USB_OHCI_S5P +#if defined(CONFIG_LINK_DEVICE_HSIC) || defined(CONFIG_LINK_DEVICE_USB) +#else &s5p_device_ohci, #endif +#endif + #ifdef CONFIG_USB_GADGET &s3c_device_usbgadget, #endif @@ -1891,6 +2293,9 @@ static struct platform_device *midas_devices[] __initdata = { &SYSMMU_PLATDEV(fimc2), &SYSMMU_PLATDEV(fimc3), &SYSMMU_PLATDEV(jpeg), +#ifdef CONFIG_FB_S5P_SYSMMU + &SYSMMU_PLATDEV(fimd0), +#endif &SYSMMU_PLATDEV(mfc_l), &SYSMMU_PLATDEV(mfc_r), &SYSMMU_PLATDEV(tv), @@ -1919,7 +2324,7 @@ static struct platform_device *midas_devices[] __initdata = { #ifndef CONFIG_SND_SOC_SAMSUNG_USE_DMA_WRAPPER &samsung_asoc_idma, #endif -#if defined(CONFIG_CHARGER_MAX8922_U1) || defined(CONFIG_CHARGER_MAX8922_S2PLUS) +#if defined(CONFIG_CHARGER_MAX8922_U1) &max8922_device_charger, #endif #ifdef CONFIG_EXYNOS_C2C @@ -1929,14 +2334,16 @@ static struct platform_device *midas_devices[] __initdata = { #if defined(CONFIG_VIDEO_S5C73M3_SPI) &exynos_device_spi1, #endif -#if defined(CONFIG_PHONE_IPC_SPI) +#if defined(CONFIG_LINK_DEVICE_SPI) &exynos_device_spi2, - &ipc_spi_device, #elif defined(CONFIG_TDMB) || defined(CONFIG_TDMB_MODULE) &exynos_device_spi2, +#elif defined(CONFIG_ISDBT) + &exynos_device_spi2, +#elif defined(CONFIG_LINK_DEVICE_PLD) + &exynos_device_spi2, #endif #endif - #ifdef CONFIG_BT_BCM4334 &bcm4334_bluetooth_device, #endif @@ -1950,6 +2357,13 @@ static struct platform_device *midas_devices[] __initdata = { #ifdef CONFIG_EXYNOS4_SETUP_THERMAL &s5p_device_tmu, #endif + +#ifdef CONFIG_CORESIGHT_ETM + &coresight_etb_device, + &coresight_tpiu_device, + &coresight_funnel_device, + &coresight_etm_device, +#endif }; #ifdef CONFIG_EXYNOS4_SETUP_THERMAL @@ -1979,20 +2393,25 @@ struct s5p_platform_tmu midas_tmu_data __initdata = { }; #endif -#if defined CONFIG_USB_OHCI_S5P && defined CONFIG_LINK_DEVICE_HSIC +#if defined CONFIG_USB_OHCI_S5P +#if defined(CONFIG_LINK_DEVICE_HSIC) || defined(CONFIG_LINK_DEVICE_USB) static int __init s5p_ohci_device_initcall(void) { return platform_device_register(&s5p_device_ohci); } late_initcall(s5p_ohci_device_initcall); #endif -#if defined CONFIG_USB_EHCI_S5P && defined CONFIG_LINK_DEVICE_HSIC +#endif + +#if defined CONFIG_USB_EHCI_S5P +#if defined(CONFIG_LINK_DEVICE_HSIC) || defined(CONFIG_LINK_DEVICE_USB) static int __init s5p_ehci_device_initcall(void) { return platform_device_register(&s5p_device_ehci); } late_initcall(s5p_ehci_device_initcall); #endif +#endif #if defined(CONFIG_VIDEO_TVOUT) static struct s5p_platform_hpd hdmi_hpd_data __initdata = { @@ -2004,9 +2423,43 @@ static struct s5p_platform_hpd hdmi_hpd_data __initdata = { static struct s5p_platform_cec hdmi_cec_data __initdata = { }; + +#if defined(CONFIG_MACH_GC1) && defined(CONFIG_HDMI_TX_STRENGTH) +static u8 gc1_hdmi_tx_val[5] = {0x00, 0x1f, 0x00, 0x00, 0x00}; +static struct s5p_tx_tuning gc1_tx_tuning = { + /* tx_ch: bit4 - Pre-emp + * bit3 - Amp all + * bit2 - fine amp ch0 + * bit1 - fine amp ch1 + * bit0 - fine amp ch2 + */ + .tx_ch = 0x08, + .tx_val = &gc1_hdmi_tx_val[0], +}; +static struct s5p_platform_tvout hdmi_tvout_data __initdata = { + .tx_tune = &gc1_tx_tuning, +}; +#endif #endif #if defined(CONFIG_CMA) +static unsigned long fbmem_start; +static unsigned long fbmem_size; +static int __init early_fbmem(char *p) +{ + char *endp; + + if (!p) + return -EINVAL; + + fbmem_size = memparse(p, &endp); + if (*endp == '@') + fbmem_start = memparse(endp + 1, &endp); + + return endp > p ? 0 : -EINVAL; +} +early_param("fbmem", early_fbmem); + static void __init exynos4_reserve_mem(void) { static struct cma_region regions[] = { @@ -2101,12 +2554,18 @@ static void __init exynos4_reserve_mem(void) }, #endif #ifdef CONFIG_VIDEO_SAMSUNG_MEMSIZE_FIMC1 +#ifndef CONFIG_USE_FIMC_CMA { .name = "fimc1", .size = CONFIG_VIDEO_SAMSUNG_MEMSIZE_FIMC1 * SZ_1K, +#if defined(CONFIG_MACH_GC1) + .start = 0x5ec00000, +#else .start = 0x65c00000, +#endif }, #endif +#endif #ifdef CONFIG_VIDEO_SAMSUNG_MEMSIZE_MFC1 { .name = "mfc1", @@ -2114,14 +2573,22 @@ static void __init exynos4_reserve_mem(void) { .alignment = 1 << 26, }, +#if defined(CONFIG_MACH_GC1) + .start = 0x5e000000, +#else .start = 0x64000000, +#endif }, #endif #ifdef CONFIG_VIDEO_SAMSUNG_MEMSIZE_MFC_NORMAL { .name = "mfc-normal", .size = CONFIG_VIDEO_SAMSUNG_MEMSIZE_MFC_NORMAL * SZ_1K, +#if defined(CONFIG_MACH_GC1) + .start = 0x5e000000, +#else .start = 0x64000000, +#endif }, #endif { @@ -2130,6 +2597,7 @@ static void __init exynos4_reserve_mem(void) }; #ifdef CONFIG_EXYNOS_CONTENT_PATH_PROTECTION static struct cma_region regions_secure[] = { +#ifndef CONFIG_DMA_CMA #ifdef CONFIG_ION_EXYNOS_CONTIGHEAP_SIZE { .name = "ion", @@ -2146,6 +2614,46 @@ static void __init exynos4_reserve_mem(void) .name = "sectbl", .size = SZ_1M, }, +#else +#if defined(CONFIG_USE_MFC_CMA) && defined(CONFIG_MACH_M0) +#ifdef CONFIG_ION_EXYNOS_CONTIGHEAP_SIZE + { + .name = "ion", + .size = CONFIG_ION_EXYNOS_CONTIGHEAP_SIZE * SZ_1K, + .start = 0x5F200000, + }, +#endif +#ifdef CONFIG_VIDEO_SAMSUNG_MEMSIZE_MFC_SECURE + { + .name = "mfc-secure", + .size = CONFIG_VIDEO_SAMSUNG_MEMSIZE_MFC_SECURE * SZ_1K, + .start = 0x5C100000, + }, +#endif + { + .name = "sectbl", + .size = SZ_1M, + .start = 0x5C000000, + }, +#else +#ifdef CONFIG_ION_EXYNOS_CONTIGHEAP_SIZE + { + .name = "ion", + .size = CONFIG_ION_EXYNOS_CONTIGHEAP_SIZE * SZ_1K, + }, +#endif +#ifdef CONFIG_VIDEO_SAMSUNG_MEMSIZE_MFC_SECURE + { + .name = "mfc-secure", + .size = CONFIG_VIDEO_SAMSUNG_MEMSIZE_MFC_SECURE * SZ_1K, + }, +#endif + { + .name = "sectbl", + .size = SZ_1M, + }, +#endif +#endif { .size = 0 }, @@ -2188,7 +2696,20 @@ static void __init exynos4_reserve_mem(void) "s5p-smem/fimd=fimd;" "s5p-smem/fimc0=fimc0"; - s5p_cma_region_reserve(regions, regions_secure, 0, map); + int i; + + s5p_cma_region_reserve(regions, regions_secure, 0, map); + + if (!(fbmem_start && fbmem_size)) + return; + + for (i = 0; i < ARRAY_SIZE(regions); i++) { + if (regions[i].name && !strcmp(regions[i].name, "fimd")) { + memcpy(phys_to_virt(regions[i].start), phys_to_virt(fbmem_start), fbmem_size * SZ_1K); + printk(KERN_INFO "Bootloader sent 'fbmem' : %08X\n", (u32)fbmem_start); + break; + } + } } #else static inline void exynos4_reserve_mem(void) @@ -2258,6 +2779,9 @@ static void __init exynos_sysmmu_init(void) #ifdef CONFIG_VIDEO_JPEG_V2X sysmmu_set_owner(&SYSMMU_PLATDEV(jpeg).dev, &s5p_device_jpeg.dev); #endif +#ifdef CONFIG_FB_S5P_SYSMMU + sysmmu_set_owner(&SYSMMU_PLATDEV(fimd0).dev, &s3c_device_fb.dev); +#endif #ifdef CONFIG_VIDEO_EXYNOS_FIMC_IS ASSIGN_SYSMMU_POWERDOMAIN(is_isp, &exynos4_device_pd[PD_ISP].dev); ASSIGN_SYSMMU_POWERDOMAIN(is_drc, &exynos4_device_pd[PD_ISP].dev); @@ -2316,16 +2840,50 @@ void __init s3cfb_extdsp_set_platdata(struct s3c_platform_fb *pd) static inline int need_i2c5(void) { -#if defined(CONFIG_MACH_C1) || defined(CONFIG_MACH_C1VZW) || \ - defined(CONFIG_MACH_M0) || defined(CONFIG_MACH_M3) +#if defined(CONFIG_MACH_C1) || \ + defined(CONFIG_MACH_M0) return system_rev != 3; -#elif defined(CONFIG_MACH_JENGA) - return 0; #else return 1; #endif } +#if defined(CONFIG_FELICA) +static void felica_setup(void) +{ + /* I2C SDA GPY2[4] */ + gpio_request(FELICA_GPIO_I2C_SDA, FELICA_GPIO_I2C_SDA_NAME); + s3c_gpio_setpull(FELICA_GPIO_I2C_SDA, S3C_GPIO_PULL_DOWN); + gpio_free(FELICA_GPIO_I2C_SDA); + + /* I2C SCL GPY2[5] */ + gpio_request(FELICA_GPIO_I2C_SCL, FELICA_GPIO_I2C_SCL_NAME); + s3c_gpio_setpull(FELICA_GPIO_I2C_SCL, S3C_GPIO_PULL_DOWN); + gpio_free(FELICA_GPIO_I2C_SCL); + + /* PON GPL2[7] */ + gpio_request(FELICA_GPIO_PON, FELICA_GPIO_PON_NAME); + s3c_gpio_setpull(FELICA_GPIO_PON, S3C_GPIO_PULL_DOWN); + s3c_gpio_cfgpin(FELICA_GPIO_PON, S3C_GPIO_SFN(1)); /* OUTPUT */ + gpio_free(FELICA_GPIO_PON); + + /* RFS GPL2[6] */ + gpio_request(FELICA_GPIO_RFS, FELICA_GPIO_RFS_NAME); + s3c_gpio_setpull(FELICA_GPIO_RFS, S3C_GPIO_PULL_DOWN); + gpio_direction_input(FELICA_GPIO_RFS); + gpio_free(FELICA_GPIO_RFS); + + /* INT GPX1[7] = WAKEUP_INT1[7] */ + gpio_request(FELICA_GPIO_INT, FELICA_GPIO_INT_NAME); + s3c_gpio_setpull(FELICA_GPIO_INT, S3C_GPIO_PULL_DOWN); + s5p_register_gpio_interrupt(FELICA_GPIO_INT); + gpio_direction_input(FELICA_GPIO_INT); + irq_set_irq_type(gpio_to_irq(FELICA_GPIO_INT), IRQF_TRIGGER_FALLING); + s3c_gpio_cfgpin(FELICA_GPIO_INT, S3C_GPIO_SFN(0xF)); /* EINT */ + gpio_free(FELICA_GPIO_INT); +} +#endif + static void __init midas_machine_init(void) { struct clk *ppmu_clk = NULL; @@ -2337,8 +2895,9 @@ static void __init midas_machine_init(void) struct clk *prnt = NULL; struct device *spi1_dev = &exynos_device_spi1.dev; #endif -#if defined(CONFIG_PHONE_IPC_SPI) \ - || defined(CONFIG_TDMB) || defined(CONFIG_TDMB_MODULE) +#if defined(CONFIG_LINK_DEVICE_SPI) \ + || defined(CONFIG_TDMB) || defined(CONFIG_TDMB_MODULE) \ + || defined(CONFIG_ISDBT) || defined(CONFIG_LINK_DEVICE_PLD) struct device *spi2_dev = &exynos_device_spi2.dev; #endif #endif @@ -2361,23 +2920,28 @@ static void __init midas_machine_init(void) s3c_i2c1_set_platdata(NULL); i2c_register_board_info(1, i2c_devs1, ARRAY_SIZE(i2c_devs1)); +#if defined(CONFIG_S3C_DEV_I2C2) \ + && !defined(CONFIG_MACH_T0_EUR_OPEN) \ + && !defined(CONFIG_MACH_T0_CHN_CU_DUOS) \ + && !defined(CONFIG_MACH_T0_CHN_OPEN_DUOS) \ + && !defined(CONFIG_MACH_T0_CHN_CMCC) \ + && !defined(CONFIG_MACH_T0_CHN_OPEN) + s3c_i2c2_set_platdata(NULL); +#endif + s3c_i2c3_set_platdata(NULL); midas_tsp_init(); #ifndef CONFIG_TOUCHSCREEN_MELFAS_GC -#if !defined(CONFIG_MACH_M0_GRANDECTC) midas_tsp_set_lcdtype(lcdtype); #endif -#endif #ifdef CONFIG_LEDS_AAT1290A platform_device_register(&s3c_device_aat1290a_led); #endif #ifdef CONFIG_S3C_DEV_I2C4 -#ifdef CONFIG_MACH_MIDAS_02_BD +#if defined(CONFIG_MACH_T0) s3c_i2c4_set_platdata(NULL); - i2c_register_board_info(4, i2c_devs4_max77693, - ARRAY_SIZE(i2c_devs4_max77693)); #else s3c_i2c4_set_platdata(NULL); if (!(system_rev != 3 && system_rev >= 0)) { @@ -2385,16 +2949,31 @@ static void __init midas_machine_init(void) ARRAY_SIZE(i2c_devs4_max77693)); } #endif -#endif +#endif /* CONFIG_S3C_DEV_I2C4 */ midas_sound_init(); #ifdef CONFIG_S3C_DEV_I2C5 +#if defined(CONFIG_MACH_T0_EUR_OPEN) || defined(CONFIG_MACH_T0_CHN_OPEN) + s3c_i2c5_set_platdata(NULL); +#else if (need_i2c5()) { s3c_i2c5_set_platdata(&default_i2c5_data); i2c_register_board_info(5, i2c_devs5, ARRAY_SIZE(i2c_devs5)); } #endif +#endif + +#if defined(CONFIG_INPUT_WACOM) + midas_wacom_init(); +#endif + +#ifdef CONFIG_S3C_DEV_I2C6 +#if defined(CONFIG_MACH_T0_EUR_OPEN) || defined(CONFIG_MACH_T0_CHN_OPEN) + s3c_i2c6_set_platdata(&default_i2c6_data); + i2c_register_board_info(6, i2c_devs6, ARRAY_SIZE(i2c_devs6)); +#endif +#endif #ifdef CONFIG_MACH_GC1 s3c_i2c7_set_platdata(NULL); @@ -2413,7 +2992,7 @@ static void __init midas_machine_init(void) #endif i2c_register_board_info(8, i2c_devs8_emul, ARRAY_SIZE(i2c_devs8_emul)); -#ifndef CONFIG_LEDS_AAT1290A +#if !defined(CONFIG_MACH_GC1) && !defined(CONFIG_LEDS_AAT1290A) gpio_request(GPIO_3_TOUCH_INT, "3_TOUCH_INT"); s5p_register_gpio_interrupt(GPIO_3_TOUCH_INT); #endif @@ -2426,17 +3005,12 @@ static void __init midas_machine_init(void) i2c_register_board_info(11, i2c_devs11_emul, ARRAY_SIZE(i2c_devs11_emul)); -#if defined(CONFIG_PN65N_NFC) && !defined(CONFIG_MACH_C1) \ - && !defined(CONFIG_MACH_C1VZW) && !defined(CONFIG_MACH_M3) +#if defined(CONFIG_PN65N_NFC) && \ + !defined(CONFIG_MACH_C1) && !defined(CONFIG_MACH_BAFFIN) i2c_register_board_info(12, i2c_devs12_emul, ARRAY_SIZE(i2c_devs12_emul)); #endif -#if defined(CONFIG_MACH_S2PLUS) - i2c_register_board_info(13, i2c_devs13_emul, - ARRAY_SIZE(i2c_devs13_emul)); -#endif - #ifdef CONFIG_BATTERY_MAX17047_FUELGAUGE /* max17047 fuel gauge */ i2c_register_board_info(14, i2c_devs14_emul, @@ -2450,28 +3024,51 @@ static void __init midas_machine_init(void) i2c_register_board_info(16, i2c_devs16_emul, ARRAY_SIZE(i2c_devs16_emul)); #endif -#if defined(CONFIG_MACH_C1) || defined(CONFIG_MACH_C1VZW) || \ - defined(CONFIG_MACH_JENGA) || defined(CONFIG_MACH_S2PLUS) || \ - defined(CONFIG_MACH_M0) || defined(CONFIG_MACH_M3) || \ - defined(CONFIG_MACH_GC1) +#if defined(CONFIG_MACH_C1) || \ + defined(CONFIG_MACH_M3) || \ + defined(CONFIG_MACH_M0) || \ + defined(CONFIG_MACH_GC1) || defined(CONFIG_MACH_T0) ||\ + defined(CONFIG_MACH_BAFFIN) +#if defined(CONFIG_MACH_T0) && defined(CONFIG_TARGET_LOCALE_KOR) + if (system_rev >= 9) + max77693_haptic_pdata.motor_en = motor_en; +#endif +#if defined(CONFIG_MACH_BAFFIN) + max77693_haptic_pdata.motor_en = motor_en; +#endif i2c_register_board_info(17, i2c_devs17_emul, ARRAY_SIZE(i2c_devs17_emul)); #endif -#if defined(CONFIG_STMPE811_ADC) || defined(CONFIG_FM_SI4709_MODULE) \ - || defined(CONFIG_FM_SI4705_MODULE) - i2c_register_board_info(19, i2c_devs19_emul, - ARRAY_SIZE(i2c_devs19_emul)); -#endif -#ifdef CONFIG_LEDS_AN30259A +#if defined(CONFIG_LEDS_AN30259A) || defined(CONFIG_LEDS_LP5521) i2c_register_board_info(21, i2c_devs21_emul, ARRAY_SIZE(i2c_devs21_emul)); #endif +#if defined (CONFIG_BARCODE_EMUL_ICE4) + i2c_register_board_info(22, i2c_devs22_emul, + ARRAY_SIZE(i2c_devs22_emul)); +#endif + +#if defined(CONFIG_FELICA) + i2c_register_board_info(30, i2c_devs30, ARRAY_SIZE(i2c_devs30)); +#endif #if defined(GPIO_OLED_DET) - gpio_request(GPIO_OLED_DET, "OLED_DET"); - s5p_register_gpio_interrupt(GPIO_OLED_DET); - gpio_free(GPIO_OLED_DET); + if (unlikely(gpio_request(GPIO_OLED_DET, "OLED_DET"))) + pr_err("Request GPIO_OLED_DET is failed\n"); + else { + s5p_register_gpio_interrupt(GPIO_OLED_DET); + gpio_free(GPIO_OLED_DET); + } +#endif + +#if defined(GPIO_ERR_FG) + if (unlikely(gpio_request(GPIO_ERR_FG, "OLED_DET"))) + pr_err("Request GPIO_ERR_FG is failed\n"); + else { + s5p_register_gpio_interrupt(GPIO_ERR_FG); + gpio_free(GPIO_ERR_FG); + } #endif #ifdef CONFIG_FB_S5P @@ -2530,9 +3127,16 @@ static void __init midas_machine_init(void) s3cfb_extdsp_set_platdata(&default_extdsp_data); #endif +#if defined(CONFIG_FELICA) + felica_setup(); +#endif /* CONFIG_FELICA */ + #if defined(CONFIG_VIDEO_TVOUT) s5p_hdmi_hpd_set_platdata(&hdmi_hpd_data); s5p_hdmi_cec_set_platdata(&hdmi_cec_data); +#if defined(CONFIG_MACH_GC1) && defined(CONFIG_HDMI_TX_STRENGTH) + s5p_hdmi_tvout_set_platdata(&hdmi_tvout_data); +#endif #ifdef CONFIG_EXYNOS_DEV_PD s5p_device_tvout.dev.parent = &exynos4_device_pd[PD_TV].dev; exynos4_device_pd[PD_TV].dev.parent = &exynos4_device_pd[PD_LCD0].dev; @@ -2580,18 +3184,19 @@ static void __init midas_machine_init(void) platform_add_devices(midas_devices, ARRAY_SIZE(midas_devices)); #ifdef CONFIG_S3C_ADC -#if defined(CONFIG_MACH_S2PLUS) +#if defined(CONFIG_MACH_GC1) || defined(CONFIG_MACH_T0) platform_device_register(&s3c_device_adc); #else if (system_rev != 3) platform_device_register(&s3c_device_adc); #endif + +#if defined(CONFIG_MACH_GC1) + gc1_jack_init(); #endif -#if defined(CONFIG_STMPE811_ADC) || defined(CONFIG_FM_SI4709_MODULE) \ - || defined(CONFIG_FM_SI4705_MODULE) - platform_device_register(&s3c_device_i2c19); + #endif -#if defined(CONFIG_BATTERY_SAMSUNG) || defined(CONFIG_BATTERY_SAMSUNG_S2PLUS) +#if defined(CONFIG_BATTERY_SAMSUNG) platform_device_register(&samsung_device_battery); #endif #ifdef CONFIG_SEC_THERMISTOR @@ -2600,9 +3205,8 @@ static void __init midas_machine_init(void) #if defined(CONFIG_MACH_M0_CTC) midas_gpiokeys_platform_data.buttons = m0_buttons; midas_gpiokeys_platform_data.nbuttons = ARRAY_SIZE(m0_buttons); -#elif defined(CONFIG_MACH_C1) || defined(CONFIG_MACH_C1VZW) || \ - defined(CONFIG_MACH_JENGA) || defined(CONFIG_MACH_S2PLUS) || \ - defined(CONFIG_MACH_M0) || defined(CONFIG_MACH_M3) +#elif defined(CONFIG_MACH_C1) || \ + defined(CONFIG_MACH_M0) if (system_rev != 3 && system_rev >= 1) { midas_gpiokeys_platform_data.buttons = m0_buttons; midas_gpiokeys_platform_data.nbuttons = ARRAY_SIZE(m0_buttons); @@ -2611,7 +3215,7 @@ static void __init midas_machine_init(void) /* Above logic is too complex. Let's override whatever the result is... */ -#if defined(CONFIG_MACH_M0) || defined(CONFIG_MACH_C1VZW) +#if defined(CONFIG_MACH_M0) #if defined(CONFIG_MACH_M0_CHNOPEN) || defined(CONFIG_MACH_M0_HKTW) { #else @@ -2622,7 +3226,8 @@ static void __init midas_machine_init(void) midas_gpiokeys_platform_data.nbuttons = ARRAY_SIZE(m0_rev11_buttons); } -#elif defined(CONFIG_TARGET_LOCALE_KOR) +#elif defined(CONFIG_TARGET_LOCALE_KOR) && \ + (defined(CONFIG_MACH_M0) || defined(CONFIG_MACH_C1)) s3c_gpio_setpull(GPIO_OK_KEY_ANDROID, S3C_GPIO_PULL_NONE); midas_gpiokeys_platform_data.buttons = c1_rev04_buttons; midas_gpiokeys_platform_data.nbuttons = @@ -2635,20 +3240,38 @@ static void __init midas_machine_init(void) midas_gpiokeys_platform_data.nbuttons = ARRAY_SIZE(m0_rev11_buttons); } +#elif defined(CONFIG_MACH_T0) || defined(CONFIG_MACH_M3) + midas_gpiokeys_platform_data.buttons = t0_buttons; + midas_gpiokeys_platform_data.nbuttons = ARRAY_SIZE(t0_buttons); +#elif defined(CONFIG_MACH_BAFFIN) + s3c_gpio_setpull(GPIO_OK_KEY_ANDROID, S3C_GPIO_PULL_NONE); + midas_gpiokeys_platform_data.buttons = c1_rev04_buttons; + midas_gpiokeys_platform_data.nbuttons = + ARRAY_SIZE(c1_rev04_buttons); #endif - - platform_device_register(&midas_keypad); #ifdef CONFIG_MACH_GC1 - gpio_direction_output(GPIO_TOP_PCB_PWREN, 1); + /*for emul type*/ + if (system_rev < 2) { + printk(KERN_DEBUG"[KEYS] rev %x. switch wide/tele gpio\n", + system_rev); + gpio_direction_output(GPIO_TOP_PCB_PWREN, 1); + midas_buttons[3].gpio = GPIO_WIDE_KEY; + midas_buttons[4].gpio = GPIO_TELE_KEY; + midas_buttons[5].code = KEY_RECORD; + midas_buttons[5].gpio = GPIO_RECORD_KEY; + midas_buttons[6].code = KEY_PLAY; + midas_buttons[6].gpio = GPIO_PLAY_KEY; + } #endif + platform_device_register(&midas_keypad); #if defined(CONFIG_S3C_DEV_I2C5) if (need_i2c5()) platform_device_register(&s3c_device_i2c5); #endif -#if defined(CONFIG_PN65N_NFC) && !defined(CONFIG_MACH_C1) \ - && !defined(CONFIG_MACH_C1VZW) && !defined(CONFIG_MACH_M3) +#if defined(CONFIG_PN65N_NFC) && \ + !defined(CONFIG_MACH_C1) && !defined(CONFIG_MACH_BAFFIN) platform_device_register(&s3c_device_i2c12); #endif @@ -2664,7 +3287,8 @@ static void __init midas_machine_init(void) printk(KERN_ERR "Unable to set parent %s of clock %s.\n", prnt->name, sclk->name); - clk_set_rate(sclk, 88 * 1000 * 1000); + clk_set_rate(sclk, 100 * 1000 * 1000); /*50MHz*/ + clk_put(sclk); clk_put(prnt); @@ -2682,8 +3306,9 @@ static void __init midas_machine_init(void) spi_register_board_info(spi1_board_info, ARRAY_SIZE(spi1_board_info)); #endif -#if defined(CONFIG_PHONE_IPC_SPI) \ - || defined(CONFIG_TDMB) || defined(CONFIG_TDMB_MODULE) +#if defined(CONFIG_LINK_DEVICE_SPI) \ + || defined(CONFIG_TDMB) || defined(CONFIG_TDMB_MODULE) \ + || defined(CONFIG_ISDBT) || defined(CONFIG_LINK_DEVICE_PLD) sclk = NULL; prnt = NULL; @@ -2715,6 +3340,8 @@ static void __init midas_machine_init(void) #if defined(CONFIG_TDMB) || defined(CONFIG_TDMB_MODULE) tdmb_dev_init(); +#elif defined(CONFIG_ISDBT) + isdbt_dev_init(); #endif #endif @@ -2749,8 +3376,13 @@ static void __init midas_machine_init(void) /* 400 kHz for initialization of MMC Card */ __raw_writel((__raw_readl(EXYNOS4_CLKDIV_FSYS3) & 0xfffffff0) | 0x9, EXYNOS4_CLKDIV_FSYS3); +#ifdef CONFIG_MACH_T0 + __raw_writel((__raw_readl(EXYNOS4_CLKDIV_FSYS2) & 0xfff0fff0) + | 0x90009, EXYNOS4_CLKDIV_FSYS2); +#else __raw_writel((__raw_readl(EXYNOS4_CLKDIV_FSYS2) & 0xfff0fff0) | 0x80008, EXYNOS4_CLKDIV_FSYS2); +#endif __raw_writel((__raw_readl(EXYNOS4_CLKDIV_FSYS1) & 0xfff0fff0) | 0x80008, EXYNOS4_CLKDIV_FSYS1); } @@ -2773,6 +3405,27 @@ static void __init exynos_c2c_reserve(void) } #endif +#ifdef CONFIG_DMA_CMA +static void __init exynos4_reserve(void) +{ + int ret = 0; + +#ifdef CONFIG_USE_FIMC_CMA + ret = dma_declare_contiguous(&s3c_device_fimc1.dev, + CONFIG_VIDEO_SAMSUNG_MEMSIZE_FIMC1 * SZ_1K, 0x65800000, 0); + if (ret != 0) + panic("alloc failed for FIMC1\n"); +#endif + +#if defined(CONFIG_USE_MFC_CMA) && defined(CONFIG_MACH_M0) + ret = dma_declare_contiguous(&s5p_device_mfc.dev, + 0x02800000, 0x5C800000, 0); +#endif + if (ret != 0) + printk(KERN_ERR "%s Fail\n", __func__); +} +#endif + static void __init exynos_init_reserve(void) { sec_debug_magic_init(); @@ -2784,8 +3437,10 @@ MACHINE_START(SMDK4412, "SMDK4x12") .map_io = midas_map_io, .init_machine = midas_machine_init, .timer = &exynos4_timer, -#ifdef CONFIG_EXYNOS_C2C +#if defined(CONFIG_EXYNOS_C2C) .reserve = &exynos_c2c_reserve, +#elif defined(CONFIG_DMA_CMA) + .reserve = &exynos4_reserve, #endif .init_early = &exynos_init_reserve, MACHINE_END @@ -2796,8 +3451,10 @@ MACHINE_START(SMDK4212, "SMDK4x12") .map_io = midas_map_io, .init_machine = midas_machine_init, .timer = &exynos4_timer, -#ifdef CONFIG_EXYNOS_C2C +#if defined(CONFIG_EXYNOS_C2C) .reserve = &exynos_c2c_reserve, +#elif defined(CONFIG_DMA_CMA) + .reserve = &exynos4_reserve, #endif .init_early = &exynos_init_reserve, MACHINE_END |