aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-exynos
diff options
context:
space:
mode:
authorimilka <pkzl22@gmail.com>2012-11-10 22:16:18 +0000
committerEspen Fjellvær Olsen <espen@mrfjo.org>2012-11-11 15:59:50 +0100
commit3c3b858c0168ae826525595ef2fb5d275484f989 (patch)
tree582c77f5deabe0604845fccde2b4186f4c82857a /arch/arm/mach-exynos
parentb1b33a2c6e1af144fae79c803df637683502e5c8 (diff)
downloadkernel_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.c25
-rwxr-xr-xarch/arm/mach-exynos/midas-wacom.c197
-rw-r--r--arch/arm/mach-exynos/t0-gpio.c26
-rw-r--r--arch/arm/mach-exynos/t0-sound.c15
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();