Commit 8df97495 authored by Olof Johansson's avatar Olof Johansson

Merge branch 'samsung/board' into next/boards

* 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
parents 578bd83d 39cb263e
...@@ -167,6 +167,24 @@ static struct s3c2410fb_display mini2440_lcd_cfg[] __initdata = { ...@@ -167,6 +167,24 @@ static struct s3c2410fb_display mini2440_lcd_cfg[] __initdata = {
.lcdcon5 = (S3C2410_LCDCON5_FRM565 | .lcdcon5 = (S3C2410_LCDCON5_FRM565 |
S3C2410_LCDCON5_HWSWP), 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 */ /* todo - put into gpio header */
......
...@@ -188,7 +188,7 @@ config SMDK6410_WM1190_EV1 ...@@ -188,7 +188,7 @@ config SMDK6410_WM1190_EV1
depends on MACH_SMDK6410 depends on MACH_SMDK6410
select REGULATOR select REGULATOR
select REGULATOR_WM8350 select REGULATOR_WM8350
select S3C24XX_GPIO_EXTRA64 select SAMSUNG_GPIO_EXTRA64
select MFD_WM8350_I2C select MFD_WM8350_I2C
select MFD_WM8350_CONFIG_MODE_0 select MFD_WM8350_CONFIG_MODE_0
select MFD_WM8350_CONFIG_MODE_3 select MFD_WM8350_CONFIG_MODE_3
...@@ -206,7 +206,7 @@ config SMDK6410_WM1192_EV1 ...@@ -206,7 +206,7 @@ config SMDK6410_WM1192_EV1
depends on MACH_SMDK6410 depends on MACH_SMDK6410
select REGULATOR select REGULATOR
select REGULATOR_WM831X select REGULATOR_WM831X
select S3C24XX_GPIO_EXTRA64 select SAMSUNG_GPIO_EXTRA64
select MFD_WM831X select MFD_WM831X
select MFD_WM831X_I2C select MFD_WM831X_I2C
help help
...@@ -287,7 +287,7 @@ config MACH_WLF_CRAGG_6410 ...@@ -287,7 +287,7 @@ config MACH_WLF_CRAGG_6410
select S3C_DEV_WDT select S3C_DEV_WDT
select S3C_DEV_RTC select S3C_DEV_RTC
select S3C64XX_DEV_SPI select S3C64XX_DEV_SPI
select S3C24XX_GPIO_EXTRA128 select SAMSUNG_GPIO_EXTRA128
select I2C select I2C
help help
Machine support for the Wolfson Cragganmore S3C6410 variant. Machine support for the Wolfson Cragganmore S3C6410 variant.
...@@ -15,9 +15,11 @@ ...@@ -15,9 +15,11 @@
#define BANFF_PMIC_IRQ_BASE IRQ_BOARD_START #define BANFF_PMIC_IRQ_BASE IRQ_BOARD_START
#define GLENFARCLAS_PMIC_IRQ_BASE (IRQ_BOARD_START + 64) #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 PCA935X_GPIO_BASE GPIO_BOARD_START
#define CODEC_GPIO_BASE (GPIO_BOARD_START + 8) #define CODEC_GPIO_BASE (GPIO_BOARD_START + 8)
#define GLENFARCLAS_PMIC_GPIO_BASE (GPIO_BOARD_START + 16) #define GLENFARCLAS_PMIC_GPIO_BASE (GPIO_BOARD_START + 32)
#define BANFF_PMIC_GPIO_BASE (GPIO_BOARD_START + 64)
#endif #endif
...@@ -88,6 +88,6 @@ enum s3c_gpio_number { ...@@ -88,6 +88,6 @@ enum s3c_gpio_number {
/* define the number of gpios we need to the one after the GPQ() range */ /* 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 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) #define ARCH_NR_GPIOS (GPIO_BOARD_START + BOARD_NR_GPIOS)
...@@ -169,7 +169,7 @@ ...@@ -169,7 +169,7 @@
#define IRQ_BOARD_START (IRQ_EINT_GROUP9_BASE + IRQ_EINT_GROUP9_NR + 1) #define IRQ_BOARD_START (IRQ_EINT_GROUP9_BASE + IRQ_EINT_GROUP9_NR + 1)
#ifdef CONFIG_MACH_WLF_CRAGG_6410 #ifdef CONFIG_MACH_WLF_CRAGG_6410
#define IRQ_BOARD_NR 128 #define IRQ_BOARD_NR 160
#elif defined(CONFIG_SMDK6410_WM1190_EV1) #elif defined(CONFIG_SMDK6410_WM1190_EV1)
#define IRQ_BOARD_NR 64 #define IRQ_BOARD_NR 64
#elif defined(CONFIG_SMDK6410_WM1192_EV1) #elif defined(CONFIG_SMDK6410_WM1192_EV1)
......
...@@ -14,13 +14,43 @@ ...@@ -14,13 +14,43 @@
#include <linux/mfd/wm831x/irq.h> #include <linux/mfd/wm831x/irq.h>
#include <linux/mfd/wm831x/gpio.h> #include <linux/mfd/wm831x/gpio.h>
#include <linux/mfd/wm8994/pdata.h>
#include <sound/wm5100.h>
#include <sound/wm8996.h> #include <sound/wm8996.h>
#include <sound/wm8962.h> #include <sound/wm8962.h>
#include <sound/wm9081.h> #include <sound/wm9081.h>
#include <mach/crag6410.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[] = { static struct wm8996_retune_mobile_config wm8996_retune[] = {
{ {
.name = "Sub LPF", .name = "Sub LPF",
...@@ -72,7 +102,6 @@ static struct wm8962_pdata wm8962_pdata __initdata = { ...@@ -72,7 +102,6 @@ static struct wm8962_pdata wm8962_pdata __initdata = {
0x8000 | WM8962_GPIO_FN_DMICDAT, 0x8000 | WM8962_GPIO_FN_DMICDAT,
WM8962_GPIO_FN_IRQ, /* Open drain mode */ WM8962_GPIO_FN_IRQ, /* Open drain mode */
}, },
.irq_active_low = true,
}; };
static struct wm9081_pdata wm9081_pdata __initdata = { static struct wm9081_pdata wm9081_pdata __initdata = {
...@@ -91,6 +120,7 @@ static const struct i2c_board_info wm1254_devs[] = { ...@@ -91,6 +120,7 @@ static const struct i2c_board_info wm1254_devs[] = {
static const struct i2c_board_info wm1255_devs[] = { static const struct i2c_board_info wm1255_devs[] = {
{ I2C_BOARD_INFO("wm5100", 0x1a), { I2C_BOARD_INFO("wm5100", 0x1a),
.platform_data = &wm5100_pdata,
.irq = GLENFARCLAS_PMIC_IRQ_BASE + WM831X_IRQ_GPIO_2, .irq = GLENFARCLAS_PMIC_IRQ_BASE + WM831X_IRQ_GPIO_2,
}, },
{ I2C_BOARD_INFO("wm9081", 0x6c), { I2C_BOARD_INFO("wm9081", 0x6c),
...@@ -104,6 +134,24 @@ static const struct i2c_board_info wm1259_devs[] = { ...@@ -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 { static __devinitdata const struct {
u8 id; u8 id;
...@@ -125,6 +173,8 @@ static __devinitdata const struct { ...@@ -125,6 +173,8 @@ static __devinitdata const struct {
{ .id = 0x3b, .name = "1255-EV1 Kilchoman", { .id = 0x3b, .name = "1255-EV1 Kilchoman",
.i2c_devs = wm1255_devs, .num_i2c_devs = ARRAY_SIZE(wm1255_devs) }, .i2c_devs = wm1255_devs, .num_i2c_devs = ARRAY_SIZE(wm1255_devs) },
{ .id = 0x3c, .name = "1273-EV1 Longmorn" }, { .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, 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, ...@@ -154,8 +204,8 @@ static __devinit int wlf_gf_module_probe(struct i2c_client *i2c,
"Failed to register dev: %d\n", ret); "Failed to register dev: %d\n", ret);
} }
} else { } else {
dev_warn(&i2c->dev, "Unknown module ID %d revision %d\n", dev_warn(&i2c->dev, "Unknown module ID 0x%x revision %d\n",
id, rev); id, rev + 1);
} }
return 0; return 0;
......
...@@ -37,6 +37,8 @@ ...@@ -37,6 +37,8 @@
#include <linux/mfd/wm831x/irq.h> #include <linux/mfd/wm831x/irq.h>
#include <linux/mfd/wm831x/gpio.h> #include <linux/mfd/wm831x/gpio.h>
#include <sound/wm1250-ev1.h>
#include <asm/hardware/vic.h> #include <asm/hardware/vic.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
...@@ -288,6 +290,11 @@ static struct platform_device speyside_wm8962_device = { ...@@ -288,6 +290,11 @@ static struct platform_device speyside_wm8962_device = {
.id = -1, .id = -1,
}; };
static struct platform_device littlemill_device = {
.name = "littlemill",
.id = -1,
};
static struct regulator_consumer_supply wallvdd_consumers[] = { static struct regulator_consumer_supply wallvdd_consumers[] = {
REGULATOR_SUPPLY("SPKVDD1", "1-001a"), REGULATOR_SUPPLY("SPKVDD1", "1-001a"),
REGULATOR_SUPPLY("SPKVDD2", "1-001a"), REGULATOR_SUPPLY("SPKVDD2", "1-001a"),
...@@ -340,6 +347,7 @@ static struct platform_device *crag6410_devices[] __initdata = { ...@@ -340,6 +347,7 @@ static struct platform_device *crag6410_devices[] __initdata = {
&crag6410_backlight_device, &crag6410_backlight_device,
&speyside_device, &speyside_device,
&speyside_wm8962_device, &speyside_wm8962_device,
&littlemill_device,
&lowland_device, &lowland_device,
&wallvdd_device, &wallvdd_device,
}; };
...@@ -373,6 +381,10 @@ static struct regulator_init_data vddarm __initdata = { ...@@ -373,6 +381,10 @@ static struct regulator_init_data vddarm __initdata = {
.driver_data = &vddarm_pdata, .driver_data = &vddarm_pdata,
}; };
static struct regulator_consumer_supply vddint_consumers[] __initdata = {
REGULATOR_SUPPLY("vddint", NULL),
};
static struct regulator_init_data vddint __initdata = { static struct regulator_init_data vddint __initdata = {
.constraints = { .constraints = {
.name = "VDDINT", .name = "VDDINT",
...@@ -381,6 +393,9 @@ static struct regulator_init_data vddint __initdata = { ...@@ -381,6 +393,9 @@ static struct regulator_init_data vddint __initdata = {
.always_on = 1, .always_on = 1,
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE, .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 = { static struct regulator_init_data vddmem __initdata = {
...@@ -501,7 +516,8 @@ static struct wm831x_touch_pdata touch_pdata __initdata = { ...@@ -501,7 +516,8 @@ static struct wm831x_touch_pdata touch_pdata __initdata = {
static struct wm831x_pdata crag_pmic_pdata __initdata = { static struct wm831x_pdata crag_pmic_pdata __initdata = {
.wm831x_num = 1, .wm831x_num = 1,
.irq_base = BANFF_PMIC_IRQ_BASE, .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, .backup = &banff_backup_pdata,
...@@ -606,6 +622,7 @@ static struct wm831x_pdata glenfarclas_pmic_pdata __initdata = { ...@@ -606,6 +622,7 @@ static struct wm831x_pdata glenfarclas_pmic_pdata __initdata = {
.wm831x_num = 2, .wm831x_num = 2,
.irq_base = GLENFARCLAS_PMIC_IRQ_BASE, .irq_base = GLENFARCLAS_PMIC_IRQ_BASE,
.gpio_base = GLENFARCLAS_PMIC_GPIO_BASE, .gpio_base = GLENFARCLAS_PMIC_GPIO_BASE,
.soft_shutdown = true,
.gpio_defaults = { .gpio_defaults = {
/* GPIO1-3: IRQ inputs, rising edge triggered, CMOS */ /* GPIO1-3: IRQ inputs, rising edge triggered, CMOS */
...@@ -623,6 +640,16 @@ static struct wm831x_pdata glenfarclas_pmic_pdata __initdata = { ...@@ -623,6 +640,16 @@ static struct wm831x_pdata glenfarclas_pmic_pdata __initdata = {
.disable_touch = true, .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 = { static struct i2c_board_info i2c_devs1[] __initdata = {
{ I2C_BOARD_INFO("wm8311", 0x34), { I2C_BOARD_INFO("wm8311", 0x34),
.irq = S3C_EINT(0), .irq = S3C_EINT(0),
...@@ -632,7 +659,13 @@ static struct i2c_board_info i2c_devs1[] __initdata = { ...@@ -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", 0x25) },
{ I2C_BOARD_INFO("wlf-gf-module", 0x26) }, { 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) static void __init crag6410_map_io(void)
...@@ -693,7 +726,7 @@ static void __init crag6410_machine_init(void) ...@@ -693,7 +726,7 @@ static void __init crag6410_machine_init(void)
s3c_sdhci2_set_platdata(&crag6410_hsmmc2_pdata); s3c_sdhci2_set_platdata(&crag6410_hsmmc2_pdata);
s3c_i2c0_set_platdata(&i2c0_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); s3c_fb_set_platdata(&crag6410_lcd_pdata);
i2c_register_board_info(0, i2c_devs0, ARRAY_SIZE(i2c_devs0)); i2c_register_board_info(0, i2c_devs0, ARRAY_SIZE(i2c_devs0));
......
...@@ -89,6 +89,8 @@ static struct sleep_save misc_save[] = { ...@@ -89,6 +89,8 @@ static struct sleep_save misc_save[] = {
SAVE_ITEM(S3C64XX_SDMA_SEL), SAVE_ITEM(S3C64XX_SDMA_SEL),
SAVE_ITEM(S3C64XX_MODEM_MIFPCON), SAVE_ITEM(S3C64XX_MODEM_MIFPCON),
SAVE_ITEM(S3C64XX_NORMAL_CFG),
}; };
void s3c_pm_configure_extint(void) void s3c_pm_configure_extint(void)
...@@ -181,10 +183,23 @@ static void s3c64xx_pm_prepare(void) ...@@ -181,10 +183,23 @@ static void s3c64xx_pm_prepare(void)
static int s3c64xx_pm_init(void) static int s3c64xx_pm_init(void)
{ {
u32 val;
pm_cpu_prep = s3c64xx_pm_prepare; pm_cpu_prep = s3c64xx_pm_prepare;
pm_cpu_sleep = s3c64xx_cpu_suspend; pm_cpu_sleep = s3c64xx_cpu_suspend;
pm_uart_udivslot = 1; 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 #ifdef CONFIG_S3C_PM_DEBUG_LED_SMDK
gpio_request(S3C64XX_GPN(12), "DEBUG_LED0"); gpio_request(S3C64XX_GPN(12), "DEBUG_LED0");
gpio_request(S3C64XX_GPN(13), "DEBUG_LED1"); gpio_request(S3C64XX_GPN(13), "DEBUG_LED1");
......
...@@ -88,12 +88,20 @@ config S5P_GPIO_DRVSTR ...@@ -88,12 +88,20 @@ config S5P_GPIO_DRVSTR
config SAMSUNG_GPIO_EXTRA config SAMSUNG_GPIO_EXTRA
int "Number of additional GPIO pins" int "Number of additional GPIO pins"
default 128 if SAMSUNG_GPIO_EXTRA128
default 64 if SAMSUNG_GPIO_EXTRA64
default 0 default 0
help help
Use additional GPIO space in addition to the GPIO's the SOC Use additional GPIO space in addition to the GPIO's the SOC
provides. This allows expanding the GPIO space for use with provides. This allows expanding the GPIO space for use with
GPIO expanders. GPIO expanders.
config SAMSUNG_GPIO_EXTRA64
bool
config SAMSUNG_GPIO_EXTRA128
bool
config S3C_GPIO_SPACE config S3C_GPIO_SPACE
int "Space between gpio banks" int "Space between gpio banks"
default 0 default 0
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment