]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
Merge branch 'samsung/board' into next/boards
authorOlof Johansson <olof@lixom.net>
Fri, 16 Dec 2011 22:56:37 +0000 (14:56 -0800)
committerOlof Johansson <olof@lixom.net>
Fri, 16 Dec 2011 22:56:37 +0000 (14:56 -0800)
* samsung/board:
  ARM: S3C64XX: Hook up VDDINT on Cragganmore
  ARM: S3C2440: Add new LCD (W35i) support for Mini2440 board
  ARM: S3C64XX: Power gate unused domains
  ARM: S3C64XX: Hook up Littlemill audio card on Cragganmore
  ARM: S3C64XX: Hook up platform data for Kilchomin module on Cragganmore
  ARM: S3C64XX: Run Tobermory interrupts in the default mode
  ARM: S3C64XX: Improve logging of unknown Cragganmore module types
  ARM: S3C64XX: Configure WM1250 EV1 GPIOs on Cragganmore
  ARM: S3C64XX: Use software initiated powerdown for Cragganmore
  ARM: S3C64XX: Raise the frequency of the second I2C bus on Cragganmore
  ARM: S3C64XX: Correct reservation of GPIOs for CPU module on Cragganmore
  ARM: SAMSUNG: Fix GPIO space reservation for S3C64xx platforms
  ARM: S3C64XX: Update for conversion to SAMSUNG_GPIO_EXTRA

Conflicts:
arch/arm/mach-s3c64xx/mach-crag6410.c

arch/arm/mach-s3c2440/mach-mini2440.c
arch/arm/mach-s3c64xx/Kconfig
arch/arm/mach-s3c64xx/include/mach/crag6410.h
arch/arm/mach-s3c64xx/include/mach/gpio.h
arch/arm/mach-s3c64xx/include/mach/irqs.h
arch/arm/mach-s3c64xx/mach-crag6410-module.c
arch/arm/mach-s3c64xx/mach-crag6410.c
arch/arm/mach-s3c64xx/pm.c
arch/arm/plat-samsung/Kconfig

index 91fe0b4c95f1939e4f7b2b2d2fe9d4ea67ed60c5..937eb7818c1a0e886fc500d14ef68932fa3d1f6b 100644 (file)
@@ -167,6 +167,24 @@ static struct s3c2410fb_display mini2440_lcd_cfg[] __initdata = {
                .lcdcon5        = (S3C2410_LCDCON5_FRM565 |
                                   S3C2410_LCDCON5_HWSWP),
        },
+       /* mini2440 + 3.5" TFT (LCD-W35i, LQ035Q1DG06 type) + touchscreen*/
+       [3] = {
+               _LCD_DECLARE(
+                       /* clock */
+                       7,
+                       /* xres, margin_right, margin_left, hsync */
+                       320, 68, 66, 4,
+                       /* yres, margin_top, margin_bottom, vsync */
+                       240, 4, 4, 9,
+                       /* refresh rate */
+                       60),
+               .lcdcon5        = (S3C2410_LCDCON5_FRM565 |
+                                  S3C2410_LCDCON5_INVVDEN |
+                                  S3C2410_LCDCON5_INVVFRAME |
+                                  S3C2410_LCDCON5_INVVLINE |
+                                  S3C2410_LCDCON5_INVVCLK |
+                                  S3C2410_LCDCON5_HWSWP),
+       },
 };
 
 /* todo - put into gpio header */
index 5552e048c2be510608bd6fbd1f1418c9e5ab74a7..4d8c489edc04805f338b88c97059b175cd1cf73b 100644 (file)
@@ -188,7 +188,7 @@ config SMDK6410_WM1190_EV1
        depends on MACH_SMDK6410
        select REGULATOR
        select REGULATOR_WM8350
-       select S3C24XX_GPIO_EXTRA64
+       select SAMSUNG_GPIO_EXTRA64
        select MFD_WM8350_I2C
        select MFD_WM8350_CONFIG_MODE_0
        select MFD_WM8350_CONFIG_MODE_3
@@ -206,7 +206,7 @@ config SMDK6410_WM1192_EV1
        depends on MACH_SMDK6410
        select REGULATOR
        select REGULATOR_WM831X
-       select S3C24XX_GPIO_EXTRA64
+       select SAMSUNG_GPIO_EXTRA64
        select MFD_WM831X
        select MFD_WM831X_I2C
        help
@@ -287,7 +287,7 @@ config MACH_WLF_CRAGG_6410
        select S3C_DEV_WDT
        select S3C_DEV_RTC
        select S3C64XX_DEV_SPI
-       select S3C24XX_GPIO_EXTRA128
+       select SAMSUNG_GPIO_EXTRA128
        select I2C
        help
          Machine support for the Wolfson Cragganmore S3C6410 variant.
index be9074e17dfd62748b069a832c6780f9d04b6f3c..5d55ab018b6b3f74b1946a67d0efd84a534e3caf 100644 (file)
 
 #define BANFF_PMIC_IRQ_BASE            IRQ_BOARD_START
 #define GLENFARCLAS_PMIC_IRQ_BASE      (IRQ_BOARD_START + 64)
+#define CODEC_IRQ_BASE                 (IRQ_BOARD_START + 128)
 
 #define PCA935X_GPIO_BASE              GPIO_BOARD_START
-#define CODEC_GPIO_BASE                (GPIO_BOARD_START + 8)
-#define GLENFARCLAS_PMIC_GPIO_BASE     (GPIO_BOARD_START + 16)
+#define CODEC_GPIO_BASE                        (GPIO_BOARD_START + 8)
+#define GLENFARCLAS_PMIC_GPIO_BASE     (GPIO_BOARD_START + 32)
+#define BANFF_PMIC_GPIO_BASE           (GPIO_BOARD_START + 64)
 
 #endif
index 6e34c2f6e670394ac6437662af481af2bfaa7e79..8b540c42d5ddeae84b79efb650bdc9989406194b 100644 (file)
@@ -88,6 +88,6 @@ enum s3c_gpio_number {
 /* define the number of gpios we need to the one after the GPQ() range */
 #define GPIO_BOARD_START (S3C64XX_GPQ(S3C64XX_GPIO_Q_NR) + 1)
 
-#define BOARD_NR_GPIOS 16
+#define BOARD_NR_GPIOS (16 + CONFIG_SAMSUNG_GPIO_EXTRA)
 
 #define ARCH_NR_GPIOS  (GPIO_BOARD_START + BOARD_NR_GPIOS)
index 443f85b3c203be5b42b04019da149ba0da357278..96d60e0d9372fa5d510dab85d45f4069cb4b521a 100644 (file)
 #define IRQ_BOARD_START (IRQ_EINT_GROUP9_BASE + IRQ_EINT_GROUP9_NR + 1)
 
 #ifdef CONFIG_MACH_WLF_CRAGG_6410
-#define IRQ_BOARD_NR 128
+#define IRQ_BOARD_NR 160
 #elif defined(CONFIG_SMDK6410_WM1190_EV1)
 #define IRQ_BOARD_NR 64
 #elif defined(CONFIG_SMDK6410_WM1192_EV1)
index f208154b1382d0492898ebba6b6d7c14079ad80d..cd3c97e2ee75045afb4a855f7adf03066bca478b 100644 (file)
 
 #include <linux/mfd/wm831x/irq.h>
 #include <linux/mfd/wm831x/gpio.h>
+#include <linux/mfd/wm8994/pdata.h>
 
+#include <sound/wm5100.h>
 #include <sound/wm8996.h>
 #include <sound/wm8962.h>
 #include <sound/wm9081.h>
 
 #include <mach/crag6410.h>
 
+static struct wm5100_pdata wm5100_pdata = {
+       .ldo_ena = S3C64XX_GPN(7),
+       .irq_flags = IRQF_TRIGGER_HIGH,
+       .gpio_base = CODEC_GPIO_BASE,
+
+       .in_mode = {
+               WM5100_IN_DIFF,
+               WM5100_IN_DIFF,
+               WM5100_IN_DIFF,
+               WM5100_IN_SE,
+       },
+
+       .hp_pol = CODEC_GPIO_BASE + 3,
+       .jack_modes = {
+               { WM5100_MICDET_MICBIAS3, 0, 0 },
+               { WM5100_MICDET_MICBIAS2, 1, 1 },
+       },
+
+       .gpio_defaults = {
+               0,
+               0,
+               0,
+               0,
+               0x2, /* IRQ: CMOS output */
+               0x3, /* CLKOUT: CMOS output */
+       },
+};
+
 static struct wm8996_retune_mobile_config wm8996_retune[] = {
        {
                .name = "Sub LPF",
@@ -72,7 +102,6 @@ static struct wm8962_pdata wm8962_pdata __initdata = {
                0x8000 | WM8962_GPIO_FN_DMICDAT,
                WM8962_GPIO_FN_IRQ,    /* Open drain mode */
        },
-       .irq_active_low = true,
 };
 
 static struct wm9081_pdata wm9081_pdata __initdata = {
@@ -91,6 +120,7 @@ static const struct i2c_board_info wm1254_devs[] = {
 
 static const struct i2c_board_info wm1255_devs[] = {
        { I2C_BOARD_INFO("wm5100", 0x1a),
+         .platform_data = &wm5100_pdata,
          .irq = GLENFARCLAS_PMIC_IRQ_BASE + WM831X_IRQ_GPIO_2,
        },
        { I2C_BOARD_INFO("wm9081", 0x6c),
@@ -104,6 +134,24 @@ static const struct i2c_board_info wm1259_devs[] = {
        },
 };
 
+static struct wm8994_pdata wm8994_pdata = {
+       .gpio_base = CODEC_GPIO_BASE,
+       .gpio_defaults = {
+               0x3,          /* IRQ out, active high, CMOS */
+       },
+       .irq_base = CODEC_IRQ_BASE,
+       .ldo = {
+               { .supply = "WALLVDD" },
+               { .supply = "WALLVDD" },
+       },
+};
+
+static const struct i2c_board_info wm1277_devs[] = {
+       { I2C_BOARD_INFO("wm8958", 0x1a),  /* WM8958 is the superset */
+         .platform_data = &wm8994_pdata,
+         .irq = GLENFARCLAS_PMIC_IRQ_BASE + WM831X_IRQ_GPIO_2,
+       },
+};
 
 static __devinitdata const struct {
        u8 id;
@@ -125,6 +173,8 @@ static __devinitdata const struct {
        { .id = 0x3b, .name = "1255-EV1 Kilchoman",
          .i2c_devs = wm1255_devs, .num_i2c_devs = ARRAY_SIZE(wm1255_devs) },
        { .id = 0x3c, .name = "1273-EV1 Longmorn" },
+       { .id = 0x3d, .name = "1277-EV1 Littlemill",
+         .i2c_devs = wm1277_devs, .num_i2c_devs = ARRAY_SIZE(wm1277_devs) },
 };
 
 static __devinit int wlf_gf_module_probe(struct i2c_client *i2c,
@@ -154,8 +204,8 @@ static __devinit int wlf_gf_module_probe(struct i2c_client *i2c,
                                        "Failed to register dev: %d\n", ret);
                }
        } else {
-               dev_warn(&i2c->dev, "Unknown module ID %d revision %d\n",
-                        id, rev);
+               dev_warn(&i2c->dev, "Unknown module ID 0x%x revision %d\n",
+                        id, rev + 1);
        }
 
        return 0;
index 988ac2e48f0818af97e8129e9134ae33d670884b..799558c15b4eeb1d595fd5059cccb3af0fc69db4 100644 (file)
@@ -37,6 +37,8 @@
 #include <linux/mfd/wm831x/irq.h>
 #include <linux/mfd/wm831x/gpio.h>
 
+#include <sound/wm1250-ev1.h>
+
 #include <asm/hardware/vic.h>
 #include <asm/mach/arch.h>
 #include <asm/mach-types.h>
@@ -288,6 +290,11 @@ static struct platform_device speyside_wm8962_device = {
        .id             = -1,
 };
 
+static struct platform_device littlemill_device = {
+       .name           = "littlemill",
+       .id             = -1,
+};
+
 static struct regulator_consumer_supply wallvdd_consumers[] = {
        REGULATOR_SUPPLY("SPKVDD1", "1-001a"),
        REGULATOR_SUPPLY("SPKVDD2", "1-001a"),
@@ -340,6 +347,7 @@ static struct platform_device *crag6410_devices[] __initdata = {
        &crag6410_backlight_device,
        &speyside_device,
        &speyside_wm8962_device,
+       &littlemill_device,
        &lowland_device,
        &wallvdd_device,
 };
@@ -373,6 +381,10 @@ static struct regulator_init_data vddarm __initdata = {
        .driver_data = &vddarm_pdata,
 };
 
+static struct regulator_consumer_supply vddint_consumers[] __initdata = {
+       REGULATOR_SUPPLY("vddint", NULL),
+};
+
 static struct regulator_init_data vddint __initdata = {
        .constraints = {
                .name = "VDDINT",
@@ -381,6 +393,9 @@ static struct regulator_init_data vddint __initdata = {
                .always_on = 1,
                .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
        },
+       .num_consumer_supplies = ARRAY_SIZE(vddint_consumers),
+       .consumer_supplies = vddint_consumers,
+       .supply_regulator = "WALLVDD",
 };
 
 static struct regulator_init_data vddmem __initdata = {
@@ -501,7 +516,8 @@ static struct wm831x_touch_pdata touch_pdata __initdata = {
 static struct wm831x_pdata crag_pmic_pdata __initdata = {
        .wm831x_num = 1,
        .irq_base = BANFF_PMIC_IRQ_BASE,
-       .gpio_base = GPIO_BOARD_START + 8,
+       .gpio_base = BANFF_PMIC_GPIO_BASE,
+       .soft_shutdown = true,
 
        .backup = &banff_backup_pdata,
 
@@ -606,6 +622,7 @@ static struct wm831x_pdata glenfarclas_pmic_pdata __initdata = {
        .wm831x_num = 2,
        .irq_base = GLENFARCLAS_PMIC_IRQ_BASE,
        .gpio_base = GLENFARCLAS_PMIC_GPIO_BASE,
+       .soft_shutdown = true,
 
        .gpio_defaults = {
                /* GPIO1-3: IRQ inputs, rising edge triggered, CMOS */
@@ -623,6 +640,16 @@ static struct wm831x_pdata glenfarclas_pmic_pdata __initdata = {
        .disable_touch = true,
 };
 
+static struct wm1250_ev1_pdata wm1250_ev1_pdata = {
+       .gpios = {
+               [WM1250_EV1_GPIO_CLK_ENA] = S3C64XX_GPN(12),
+               [WM1250_EV1_GPIO_CLK_SEL0] = S3C64XX_GPL(12),
+               [WM1250_EV1_GPIO_CLK_SEL1] = S3C64XX_GPL(13),
+               [WM1250_EV1_GPIO_OSR] = S3C64XX_GPL(14),
+               [WM1250_EV1_GPIO_MASTER] = S3C64XX_GPL(8),
+       },
+};
+
 static struct i2c_board_info i2c_devs1[] __initdata = {
        { I2C_BOARD_INFO("wm8311", 0x34),
          .irq = S3C_EINT(0),
@@ -632,7 +659,13 @@ static struct i2c_board_info i2c_devs1[] __initdata = {
        { I2C_BOARD_INFO("wlf-gf-module", 0x25) },
        { I2C_BOARD_INFO("wlf-gf-module", 0x26) },
 
-       { I2C_BOARD_INFO("wm1250-ev1", 0x27) },
+       { I2C_BOARD_INFO("wm1250-ev1", 0x27),
+         .platform_data = &wm1250_ev1_pdata },
+};
+
+static struct s3c2410_platform_i2c i2c1_pdata = {
+       .frequency = 400000,
+       .bus_num = 1,
 };
 
 static void __init crag6410_map_io(void)
@@ -693,7 +726,7 @@ static void __init crag6410_machine_init(void)
        s3c_sdhci2_set_platdata(&crag6410_hsmmc2_pdata);
 
        s3c_i2c0_set_platdata(&i2c0_pdata);
-       s3c_i2c1_set_platdata(NULL);
+       s3c_i2c1_set_platdata(&i2c1_pdata);
        s3c_fb_set_platdata(&crag6410_lcd_pdata);
 
        i2c_register_board_info(0, i2c_devs0, ARRAY_SIZE(i2c_devs0));
index b375cd5c47cb2ebe9f7b28ce2f7d0b6c0624ddc8..0868d1331912a53187e897735eaa41f0ac3b3ab1 100644 (file)
@@ -89,6 +89,8 @@ static struct sleep_save misc_save[] = {
 
        SAVE_ITEM(S3C64XX_SDMA_SEL),
        SAVE_ITEM(S3C64XX_MODEM_MIFPCON),
+
+       SAVE_ITEM(S3C64XX_NORMAL_CFG),
 };
 
 void s3c_pm_configure_extint(void)
@@ -181,10 +183,23 @@ static void s3c64xx_pm_prepare(void)
 
 static int s3c64xx_pm_init(void)
 {
+       u32 val;
+
        pm_cpu_prep = s3c64xx_pm_prepare;
        pm_cpu_sleep = s3c64xx_cpu_suspend;
        pm_uart_udivslot = 1;
 
+       /*
+        * Unconditionally disable power domains that contain only
+        * blocks which have no mainline driver support.
+        */
+       val = __raw_readl(S3C64XX_NORMAL_CFG);
+       val &= ~(S3C64XX_NORMALCFG_DOMAIN_G_ON |
+                S3C64XX_NORMALCFG_DOMAIN_V_ON |
+                S3C64XX_NORMALCFG_DOMAIN_I_ON |
+                S3C64XX_NORMALCFG_DOMAIN_P_ON);
+       __raw_writel(val, S3C64XX_NORMAL_CFG);
+
 #ifdef CONFIG_S3C_PM_DEBUG_LED_SMDK
        gpio_request(S3C64XX_GPN(12), "DEBUG_LED0");
        gpio_request(S3C64XX_GPN(13), "DEBUG_LED1");
index 313eb26cfa62cb6e953ef865ba260e6e5ee23393..bb0af66bb487994bd90a510fd1b78c14bd1a1747 100644 (file)
@@ -88,12 +88,20 @@ config S5P_GPIO_DRVSTR
 
 config SAMSUNG_GPIO_EXTRA
        int "Number of additional GPIO pins"
+       default 128 if SAMSUNG_GPIO_EXTRA128
+       default 64 if SAMSUNG_GPIO_EXTRA64
        default 0
        help
          Use additional GPIO space in addition to the GPIO's the SOC
          provides. This allows expanding the GPIO space for use with
          GPIO expanders.
 
+config SAMSUNG_GPIO_EXTRA64
+       bool
+
+config SAMSUNG_GPIO_EXTRA128
+       bool
+
 config S3C_GPIO_SPACE
        int "Space between gpio banks"
        default 0