diff options
author | imilka <pkzl22@gmail.com> | 2012-11-10 22:16:18 +0000 |
---|---|---|
committer | Espen Fjellvær Olsen <espen@mrfjo.org> | 2012-11-11 15:59:50 +0100 |
commit | 3c3b858c0168ae826525595ef2fb5d275484f989 (patch) | |
tree | 582c77f5deabe0604845fccde2b4186f4c82857a /arch/arm/mach-exynos | |
parent | b1b33a2c6e1af144fae79c803df637683502e5c8 (diff) | |
download | kernel_samsung_smdk4412-3c3b858c0168ae826525595ef2fb5d275484f989.zip kernel_samsung_smdk4412-3c3b858c0168ae826525595ef2fb5d275484f989.tar.gz kernel_samsung_smdk4412-3c3b858c0168ae826525595ef2fb5d275484f989.tar.bz2 |
n7100 support
Change-Id: I111e3be9a1c6ea8b68eab5c87fa6c084ba9bb5c3
Diffstat (limited to 'arch/arm/mach-exynos')
-rw-r--r-- | arch/arm/mach-exynos/midas-tsp.c | 25 | ||||
-rwxr-xr-x | arch/arm/mach-exynos/midas-wacom.c | 197 | ||||
-rw-r--r-- | arch/arm/mach-exynos/t0-gpio.c | 26 | ||||
-rw-r--r-- | arch/arm/mach-exynos/t0-sound.c | 15 |
4 files changed, 251 insertions, 12 deletions
diff --git a/arch/arm/mach-exynos/midas-tsp.c b/arch/arm/mach-exynos/midas-tsp.c index cc374d8..8abd17a 100644 --- a/arch/arm/mach-exynos/midas-tsp.c +++ b/arch/arm/mach-exynos/midas-tsp.c @@ -1433,6 +1433,25 @@ static void melfas_register_callback(void *cb) pr_debug("[TSP] melfas_register_callback\n"); } +#ifdef CONFIG_LCD_FREQ_SWITCH +struct tsp_lcd_callbacks *lcd_callbacks; +struct tsp_lcd_callbacks { + void (*inform_lcd)(struct tsp_lcd_callbacks *, bool); +}; + +void tsp_lcd_infom(bool en) +{ + if (lcd_callbacks && lcd_callbacks->inform_lcd) + lcd_callbacks->inform_lcd(lcd_callbacks, en); +} + +static void melfas_register_lcd_callback(void *cb) +{ + lcd_callbacks = cb; + pr_debug("[TSP] melfas_register_lcd_callback\n"); +} +#endif + static struct melfas_tsi_platform_data mms_ts_pdata = { .max_x = 720, .max_y = 1280, @@ -1449,11 +1468,14 @@ static struct melfas_tsi_platform_data mms_ts_pdata = { .power = melfas_power, .mux_fw_flash = melfas_mux_fw_flash, .is_vdd_on = is_melfas_vdd_on, - .config_fw_version = "N7100_Me_0813", + .config_fw_version = "N7100_Me_0910", /* .set_touch_i2c = melfas_set_touch_i2c, */ /* .set_touch_i2c_to_gpio = melfas_set_touch_i2c_to_gpio, */ .lcd_type = melfas_get_lcdtype, .register_cb = melfas_register_callback, +#ifdef CONFIG_LCD_FREQ_SWITCH + .register_lcd_cb = melfas_register_lcd_callback, +#endif }; static struct i2c_board_info i2c_devs3[] = { @@ -2276,3 +2298,4 @@ void midas_tsp_request_qos(void *data) schedule_delayed_work_on(0, &busqos_work, HZ / 5); } #endif + diff --git a/arch/arm/mach-exynos/midas-wacom.c b/arch/arm/mach-exynos/midas-wacom.c new file mode 100755 index 0000000..83048ec --- /dev/null +++ b/arch/arm/mach-exynos/midas-wacom.c @@ -0,0 +1,197 @@ +/* + * linux/arch/arm/mach-exynos/midas-wacom.c + * + * Copyright (c) 2011 Samsung Electronics Co., Ltd. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include <linux/i2c.h> + +#include <linux/err.h> +#include <linux/gpio.h> + +#include <linux/wacom_i2c.h> + +#include <linux/regulator/consumer.h> +#include <plat/gpio-cfg.h> + +#ifdef CONFIG_CPU_FREQ_GOV_ONDEMAND_FLEXRATE +#include <linux/cpufreq.h> +#endif + +static struct wacom_g5_callbacks *wacom_callbacks; + +static int wacom_early_suspend_hw(void) +{ + gpio_set_value(GPIO_PEN_RESET_N, 0); +#if defined(CONFIG_MACH_T0_EUR_OPEN) + if (system_rev >= 10) + gpio_direction_output(GPIO_WACOM_LDO_EN, 0); + else + gpio_direction_output(GPIO_WACOM_LDO_EN, 1); +#else + gpio_direction_output(GPIO_WACOM_LDO_EN, 0); +#endif + /* Set GPIO_PEN_IRQ to pull-up to reduce leakage */ + s3c_gpio_setpull(GPIO_PEN_IRQ, S3C_GPIO_PULL_UP); + + return 0; +} + +static int wacom_late_resume_hw(void) +{ + s3c_gpio_setpull(GPIO_PEN_IRQ, S3C_GPIO_PULL_NONE); + gpio_direction_output(GPIO_WACOM_LDO_EN, 1); + msleep(100); + gpio_set_value(GPIO_PEN_RESET_N, 1); + return 0; +} + +static int wacom_suspend_hw(void) +{ + return wacom_early_suspend_hw(); +} + +static int wacom_resume_hw(void) +{ + return wacom_late_resume_hw(); +} + +static int wacom_reset_hw(void) +{ + wacom_early_suspend_hw(); + msleep(200); + wacom_late_resume_hw(); + + return 0; +} + +static void wacom_register_callbacks(struct wacom_g5_callbacks *cb) +{ + wacom_callbacks = cb; +}; + + +static struct wacom_g5_platform_data wacom_platform_data = { + .x_invert = 1, + .y_invert = 0, + .xy_switch = 1, + .min_x = 0, + .max_x = WACOM_POSX_MAX, + .min_y = 0, + .max_y = WACOM_POSY_MAX, + .min_pressure = 0, + .max_pressure = WACOM_PRESSURE_MAX, + .gpio_pendct = GPIO_PEN_PDCT, +#ifdef WACOM_STATE_CHECK +#if defined(CONFIG_TARGET_LOCALE_KOR) +#if defined(CONFIG_MACH_T0) && defined(CONFIG_TDMB_ANT_DET) + .gpio_esd_check = GPIO_TDMB_ANT_DET_REV08, +#endif +#endif +#endif + /*.init_platform_hw = midas_wacom_init,*/ + /* .exit_platform_hw =, */ + .suspend_platform_hw = wacom_suspend_hw, + .resume_platform_hw = wacom_resume_hw, + .early_suspend_platform_hw = wacom_early_suspend_hw, + .late_resume_platform_hw = wacom_late_resume_hw, + .reset_platform_hw = wacom_reset_hw, + .register_cb = wacom_register_callbacks, +#ifdef WACOM_PEN_DETECT + .gpio_pen_insert = GPIO_WACOM_SENSE, +#endif +}; + +#if defined(CONFIG_MACH_T0_EUR_OPEN) ||\ + (defined(CONFIG_TARGET_LOCALE_CHN) && !defined(CONFIG_MACH_T0_CHN_CTC)) +/* I2C5 */ +static struct i2c_board_info i2c_devs5[] __initdata = { + { + I2C_BOARD_INFO("wacom_g5sp_i2c", 0x56), + .platform_data = &wacom_platform_data, + }, +}; +#else +/* I2C2 */ +static struct i2c_board_info i2c_devs2[] __initdata = { + { + I2C_BOARD_INFO("wacom_g5sp_i2c", 0x56), + .platform_data = &wacom_platform_data, + }, +}; +#endif + +void __init midas_wacom_init(void) +{ + int gpio; + int ret; + + /*RESET*/ + gpio = GPIO_PEN_RESET_N; + ret = gpio_request(gpio, "PEN_RESET"); + s3c_gpio_cfgpin(gpio, S3C_GPIO_OUTPUT); + gpio_direction_output(gpio, 0); + + /*SLP & FWE1*/ + if (system_rev < WACOM_FWE1_HWID) { + printk(KERN_INFO "[E-PEN] Use SLP\n"); + gpio = GPIO_PEN_SLP; + ret = gpio_request(gpio, "PEN_SLP"); + s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(0x1)); + s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP); + } else { + printk(KERN_INFO "[E-PEN] Use FWE\n"); + gpio = GPIO_PEN_FWE1; + ret = gpio_request(gpio, "PEN_FWE1"); + s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(0x1)); + s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); + } + gpio_direction_output(gpio, 0); + + /*PDCT*/ + gpio = GPIO_PEN_PDCT; + ret = gpio_request(gpio, "PEN_PDCT"); + s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(0xf)); + s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP); + s5p_register_gpio_interrupt(gpio); + gpio_direction_input(gpio); + + irq_set_irq_type(gpio_to_irq(gpio), IRQ_TYPE_EDGE_BOTH); + + /*IRQ*/ + gpio = GPIO_PEN_IRQ; + ret = gpio_request(gpio, "PEN_IRQ"); + s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); + s5p_register_gpio_interrupt(gpio); + gpio_direction_input(gpio); + +#if defined(CONFIG_MACH_T0_EUR_OPEN) ||\ + (defined(CONFIG_TARGET_LOCALE_CHN) && !defined(CONFIG_MACH_T0_CHN_CTC)) + i2c_devs5[0].irq = gpio_to_irq(gpio); + irq_set_irq_type(i2c_devs5[0].irq, IRQ_TYPE_EDGE_RISING); +#else + i2c_devs2[0].irq = gpio_to_irq(gpio); + irq_set_irq_type(i2c_devs2[0].irq, IRQ_TYPE_EDGE_RISING); +#endif + + s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(0xf)); + + /*LDO_EN*/ + gpio = GPIO_WACOM_LDO_EN; + ret = gpio_request(gpio, "PEN_LDO_EN"); + s3c_gpio_cfgpin(gpio, S3C_GPIO_OUTPUT); + gpio_direction_output(gpio, 0); + +#if defined(CONFIG_MACH_T0_EUR_OPEN) ||\ + (defined(CONFIG_TARGET_LOCALE_CHN) && !defined(CONFIG_MACH_T0_CHN_CTC)) + i2c_register_board_info(5, i2c_devs5, ARRAY_SIZE(i2c_devs5)); +#else + i2c_register_board_info(2, i2c_devs2, ARRAY_SIZE(i2c_devs2)); +#endif + + printk(KERN_INFO "[E-PEN] : wacom IC initialized.\n"); +} diff --git a/arch/arm/mach-exynos/t0-gpio.c b/arch/arm/mach-exynos/t0-gpio.c index 0712486..95b71f82 100644 --- a/arch/arm/mach-exynos/t0-gpio.c +++ b/arch/arm/mach-exynos/t0-gpio.c @@ -101,7 +101,7 @@ static struct gpio_init_data t0_init_gpios[] = { {EXYNOS4_GPX1(7), S3C_GPIO_INPUT, S3C_GPIO_SETPIN_NONE, S3C_GPIO_PULL_NONE, S5P_GPIO_DRVSTR_LV1}, /* NFC_IRQ */ -#if !defined(CONFIG_MACH_T0_EUR_OPEN) +#if defined(CONFIG_JACK_GROUND_DET) {EXYNOS4_GPX2(0), S3C_GPIO_INPUT, S3C_GPIO_SETPIN_NONE, S3C_GPIO_PULL_NONE, S5P_GPIO_DRVSTR_LV1}, /* G_DET_N */ #endif @@ -327,7 +327,7 @@ static unsigned int t0_sleep_gpio_table[][3] = { #endif {EXYNOS4_GPF2(1), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, /* MLCD_RST */ #if 1 /* defined(CONFIG_MACH_T0_EUR_OPEN) */ - {EXYNOS4_GPF2(2), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, /* CP_USB_EN */ + {EXYNOS4_GPF2(2), S3C_GPIO_SLP_PREV, S3C_GPIO_PULL_NONE}, /* CP_USB_EN */ {EXYNOS4_GPF2(3), S3C_GPIO_SLP_PREV, S3C_GPIO_PULL_NONE}, /* PLD2_RST */ {EXYNOS4_GPF2(4), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, /* BOOT_SW_SEL_CP2 */ #else @@ -419,13 +419,10 @@ static unsigned int t0_sleep_gpio_table[][3] = { {EXYNOS4_GPY2(0), S3C_GPIO_SLP_PREV, S3C_GPIO_PULL_NONE}, /* TF_EN */ {EXYNOS4_GPY2(1), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_UP}, /* PEN_RESET_N_1.8V */ {EXYNOS4_GPY2(2), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_NONE}, /* MCU_NRST_1.8V */ -#if defined(CONFIG_MACH_T0_EUR_OPEN) - {EXYNOS4_GPY2(3), S3C_GPIO_SLP_INPUT, - S3C_GPIO_PULL_DOWN}, /* NC */ +#if 1 /* defined(CONFIG_MACH_T0_EUR_OPEN) */ + {EXYNOS4_GPY2(3), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, /* NC */ #else - /* AP2MDM_PMIC_RESET_N */ - {EXYNOS4_GPY2(3), S3C_GPIO_SLP_PREV, - S3C_GPIO_PULL_UP}, + {EXYNOS4_GPY2(3), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_NONE}, /* AP2MDM_PMIC_RESET_N */ #endif {EXYNOS4_GPY2(4), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_NONE}, /* NFC_SDA_1.8V */ {EXYNOS4_GPY2(5), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_NONE}, /* NFC_SCL_1.8V */ @@ -481,7 +478,7 @@ static unsigned int t0_sleep_gpio_table[][3] = { #else {EXYNOS4212_GPJ0(1), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, /* NC */ #endif - {EXYNOS4212_GPJ0(2), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, /* UART_SEL */ + {EXYNOS4212_GPJ0(2), S3C_GPIO_SLP_PREV, S3C_GPIO_PULL_NONE}, /* UART_SEL */ {EXYNOS4212_GPJ0(3), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, /* 2_TOUCH_INT */ {EXYNOS4212_GPJ0(4), S3C_GPIO_SLP_PREV, S3C_GPIO_PULL_NONE}, /* CODEC_LDO_EN */ {EXYNOS4212_GPJ0(5), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, /* NC */ @@ -492,7 +489,7 @@ static unsigned int t0_sleep_gpio_table[][3] = { {EXYNOS4212_GPJ1(1), S3C_GPIO_SLP_PREV, S3C_GPIO_PULL_NONE}, /* TORCH_EN */ {EXYNOS4212_GPJ1(2), S3C_GPIO_SLP_PREV, S3C_GPIO_PULL_NONE}, /* TORCH_SET */ {EXYNOS4212_GPJ1(3), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, /* CAM_MCLK */ - {EXYNOS4212_GPJ1(4), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, /* USB_SEL */ + {EXYNOS4212_GPJ1(4), S3C_GPIO_SLP_PREV, S3C_GPIO_PULL_NONE}, /* USB_SEL */ {EXYNOS4212_GPM0(0), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, /* NC */ {EXYNOS4212_GPM0(1), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, /* NC */ @@ -592,7 +589,7 @@ static unsigned int t0_sleep_gpio_table[][3] = { static unsigned int t0_sleep_gpio_table[][3] = { {EXYNOS4_GPA0(0), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_NONE}, /* BT_UART_RXD */ - {EXYNOS4_GPA0(1), S3C_GPIO_SLP_OUT0, S3C_GPIO_PULL_NONE}, /* BT_UART_TXD */ + {EXYNOS4_GPA0(1), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_UP}, /* BT_UART_TXD */ {EXYNOS4_GPA0(2), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_NONE}, /* BT_UART_CTS */ {EXYNOS4_GPA0(3), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_UP}, /* BT_UART_RTS */ #if defined(CONFIG_MACH_T0_EUR_OPEN) || defined(CONFIG_TARGET_LOCALE_CHN) @@ -690,6 +687,8 @@ static unsigned int t0_sleep_gpio_table[][3] = { #if defined(CONFIG_MACH_T0_CHN_CU_DUOS) \ || defined(CONFIG_MACH_T0_CHN_OPEN_DUOS) {EXYNOS4_GPF0(4), S3C_GPIO_SLP_PREV, S3C_GPIO_PULL_NONE}, /* ESC_OFF */ +#elif defined(CONFIG_MACH_T0_CHN_CMCC) + {EXYNOS4_GPF0(4), S3C_GPIO_SLP_PREV, S3C_GPIO_PULL_NONE}, /* AP_CP_INT2 */ #else {EXYNOS4_GPF0(4), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_NONE}, /* MHL_SDA_1.8V */ #endif @@ -756,6 +755,9 @@ static unsigned int t0_sleep_gpio_table[][3] = { || defined(CONFIG_MACH_T0_CHN_OPEN_DUOS) {EXYNOS4_GPF3(4), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_NONE}, /* CDONE */ {EXYNOS4_GPF3(5), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_NONE}, /* CRESET_B */ +#elif defined(CONFIG_MACH_T0_CHN_CMCC) + {EXYNOS4_GPF3(4), S3C_GPIO_SLP_PREV, S3C_GPIO_PULL_NONE}, /* TD_PDA_ACTIVE */ + {EXYNOS4_GPF3(5), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, /* NC */ #else {EXYNOS4_GPF3(4), S3C_GPIO_SLP_OUT1, S3C_GPIO_PULL_NONE}, /* MHL_RST */ {EXYNOS4_GPF3(5), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, /* MHL_INT */ @@ -1063,9 +1065,11 @@ static unsigned int t0_sleep_gpio_table_rev05[][3] = { {EXYNOS4_GPC1(0), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, /* NC */ #endif {EXYNOS4_GPF2(0), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, /* NC */ +#if !defined(CONFIG_MACH_T0_JPN_LTE_DCM) {EXYNOS4212_GPJ1(0), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, /* NC */ {EXYNOS4212_GPJ1(1), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, /* NC */ {EXYNOS4212_GPJ1(2), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, /* NC */ +#endif }; /* diff --git a/arch/arm/mach-exynos/t0-sound.c b/arch/arm/mach-exynos/t0-sound.c index 6f931a6..e6a64e4 100644 --- a/arch/arm/mach-exynos/t0-sound.c +++ b/arch/arm/mach-exynos/t0-sound.c @@ -458,6 +458,21 @@ void __init midas_sound_init(void) #if defined(CONFIG_MACH_T0_EUR_LTE) t0_sound_pdata.dcs_offset_l = -11; t0_sound_pdata.dcs_offset_r = -8; +#elif defined(CONFIG_MACH_T0_USA_VZW) + t0_sound_pdata.dcs_offset_l = -12; + t0_sound_pdata.dcs_offset_r = -9; +#elif defined(CONFIG_MACH_T0_USA_ATT) + t0_sound_pdata.dcs_offset_l = -13; + t0_sound_pdata.dcs_offset_r = -9; +#elif defined(CONFIG_MACH_T0_USA_TMO) + t0_sound_pdata.dcs_offset_l = -11; + t0_sound_pdata.dcs_offset_r = -9; +#elif defined(CONFIG_MACH_T0_USA_SPR) + t0_sound_pdata.dcs_offset_l = -12; + t0_sound_pdata.dcs_offset_r = -9; +#elif defined(CONFIG_MACH_T0_USA_USCC) + t0_sound_pdata.dcs_offset_l = -11; + t0_sound_pdata.dcs_offset_r = -8; #endif t0_gpio_init(); |