Commit 4c31791c authored by Russell King's avatar Russell King Committed by Russell King

Merge branch 'for-rmk' of...

Merge branch 'for-rmk' of git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6 into devel
parents 98797a24 7517b3fb
...@@ -680,6 +680,13 @@ M: sakoman@gmail.com ...@@ -680,6 +680,13 @@ M: sakoman@gmail.com
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
S: Maintained S: Maintained
ARM/H4700 (HP IPAQ HX4700) MACHINE SUPPORT
P: Philipp Zabel
M: philipp.zabel@gmail.com
S: Maintained
F: arch/arm/mach-pxa/hx4700.c
F: arch/arm/mach-pxa/include/mach/hx4700.h
ARM/HP JORNADA 7XX MACHINE SUPPORT ARM/HP JORNADA 7XX MACHINE SUPPORT
P: Kristoffer Ericson P: Kristoffer Ericson
M: kristoffer.ericson@gmail.com M: kristoffer.ericson@gmail.com
...@@ -4627,7 +4634,7 @@ F: drivers/media/video/pvrusb2/ ...@@ -4627,7 +4634,7 @@ F: drivers/media/video/pvrusb2/
PXA2xx/PXA3xx SUPPORT PXA2xx/PXA3xx SUPPORT
P: Eric Miao P: Eric Miao
M: eric.miao@marvell.com M: eric.y.miao@gmail.com
P: Russell King P: Russell King
M: linux@arm.linux.org.uk M: linux@arm.linux.org.uk
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
...@@ -4641,19 +4648,19 @@ F: sound/soc/pxa/pxa2xx* ...@@ -4641,19 +4648,19 @@ F: sound/soc/pxa/pxa2xx*
PXA168 SUPPORT PXA168 SUPPORT
P: Eric Miao P: Eric Miao
M: eric.miao@marvell.com M: eric.y.miao@gmail.com
P: Jason Chagas P: Jason Chagas
M: jason.chagas@marvell.com M: jason.chagas@marvell.com
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
T: git git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6.git
S: Supported S: Maintained
PXA910 SUPPORT PXA910 SUPPORT
P: Eric Miao P: Eric Miao
M: eric.miao@marvell.com M: eric.y.miao@gmail.com
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
T: git git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6.git
S: Supported S: Maintained
PXA MMCI DRIVER PXA MMCI DRIVER
S: Orphan S: Orphan
......
...@@ -35,10 +35,6 @@ config SHARP_LOCOMO ...@@ -35,10 +35,6 @@ config SHARP_LOCOMO
config SHARP_PARAM config SHARP_PARAM
bool bool
config SHARPSL_PM
bool
select APM_EMULATION
config SHARP_SCOOP config SHARP_SCOOP
bool bool
......
...@@ -12,7 +12,6 @@ obj-$(CONFIG_DMABOUNCE) += dmabounce.o ...@@ -12,7 +12,6 @@ obj-$(CONFIG_DMABOUNCE) += dmabounce.o
obj-$(CONFIG_TIMER_ACORN) += time-acorn.o obj-$(CONFIG_TIMER_ACORN) += time-acorn.o
obj-$(CONFIG_SHARP_LOCOMO) += locomo.o obj-$(CONFIG_SHARP_LOCOMO) += locomo.o
obj-$(CONFIG_SHARP_PARAM) += sharpsl_param.o obj-$(CONFIG_SHARP_PARAM) += sharpsl_param.o
obj-$(CONFIG_SHARPSL_PM) += sharpsl_pm.o
obj-$(CONFIG_SHARP_SCOOP) += scoop.o obj-$(CONFIG_SHARP_SCOOP) += scoop.o
obj-$(CONFIG_ARCH_IXP2000) += uengine.o obj-$(CONFIG_ARCH_IXP2000) += uengine.o
obj-$(CONFIG_ARCH_IXP23XX) += uengine.o obj-$(CONFIG_ARCH_IXP23XX) += uengine.o
......
This diff is collapsed.
This diff is collapsed.
...@@ -190,6 +190,7 @@ CONFIG_ARCH_PXA=y ...@@ -190,6 +190,7 @@ CONFIG_ARCH_PXA=y
# CONFIG_MACH_SAAR is not set # CONFIG_MACH_SAAR is not set
# CONFIG_MACH_ARMCORE is not set # CONFIG_MACH_ARMCORE is not set
# CONFIG_MACH_CM_X300 is not set # CONFIG_MACH_CM_X300 is not set
CONFIG_MACH_H4700=y
CONFIG_MACH_MAGICIAN=y CONFIG_MACH_MAGICIAN=y
# CONFIG_MACH_MIOA701 is not set # CONFIG_MACH_MIOA701 is not set
# CONFIG_MACH_PCM027 is not set # CONFIG_MACH_PCM027 is not set
...@@ -828,7 +829,7 @@ CONFIG_SSB_POSSIBLE=y ...@@ -828,7 +829,7 @@ CONFIG_SSB_POSSIBLE=y
# #
# CONFIG_MFD_CORE is not set # CONFIG_MFD_CORE is not set
# CONFIG_MFD_SM501 is not set # CONFIG_MFD_SM501 is not set
# CONFIG_MFD_ASIC3 is not set CONFIG_MFD_ASIC3=y
CONFIG_HTC_EGPIO=y CONFIG_HTC_EGPIO=y
CONFIG_HTC_PASIC3=y CONFIG_HTC_PASIC3=y
# CONFIG_TPS65010 is not set # CONFIG_TPS65010 is not set
...@@ -891,7 +892,7 @@ CONFIG_FB_PXA_OVERLAY=y ...@@ -891,7 +892,7 @@ CONFIG_FB_PXA_OVERLAY=y
# CONFIG_FB_PXA_SMARTPANEL is not set # CONFIG_FB_PXA_SMARTPANEL is not set
# CONFIG_FB_PXA_PARAMETERS is not set # CONFIG_FB_PXA_PARAMETERS is not set
# CONFIG_FB_MBX is not set # CONFIG_FB_MBX is not set
# CONFIG_FB_W100 is not set CONFIG_FB_W100=y
# CONFIG_FB_VIRTUAL is not set # CONFIG_FB_VIRTUAL is not set
# CONFIG_FB_METRONOME is not set # CONFIG_FB_METRONOME is not set
# CONFIG_FB_MB862XX is not set # CONFIG_FB_MB862XX is not set
......
...@@ -52,6 +52,7 @@ ...@@ -52,6 +52,7 @@
/* /*
* Interrupt numbers for PXA910 * Interrupt numbers for PXA910
*/ */
#define IRQ_PXA910_NONE (-1)
#define IRQ_PXA910_AIRQ 0 #define IRQ_PXA910_AIRQ 0
#define IRQ_PXA910_SSP3 1 #define IRQ_PXA910_SSP3 1
#define IRQ_PXA910_SSP2 2 #define IRQ_PXA910_SSP2 2
......
...@@ -253,6 +253,10 @@ ...@@ -253,6 +253,10 @@
#define GPIO58_LCD_PCLK_WR MFP_CFG(GPIO58, AF1) #define GPIO58_LCD_PCLK_WR MFP_CFG(GPIO58, AF1)
#define GPIO85_LCD_VSYNC MFP_CFG(GPIO85, AF1) #define GPIO85_LCD_VSYNC MFP_CFG(GPIO85, AF1)
/* I2C */
#define GPIO105_CI2C_SDA MFP_CFG(GPIO105, AF1)
#define GPIO106_CI2C_SCL MFP_CFG(GPIO106, AF1)
/* I2S */ /* I2S */
#define GPIO113_I2S_MCLK MFP_CFG(GPIO113,AF6) #define GPIO113_I2S_MCLK MFP_CFG(GPIO113,AF6)
#define GPIO114_I2S_FRM MFP_CFG(GPIO114,AF1) #define GPIO114_I2S_FRM MFP_CFG(GPIO114,AF1)
...@@ -260,4 +264,27 @@ ...@@ -260,4 +264,27 @@
#define GPIO116_I2S_RXD MFP_CFG(GPIO116,AF2) #define GPIO116_I2S_RXD MFP_CFG(GPIO116,AF2)
#define GPIO117_I2S_TXD MFP_CFG(GPIO117,AF2) #define GPIO117_I2S_TXD MFP_CFG(GPIO117,AF2)
/* PWM */
#define GPIO96_PWM3_OUT MFP_CFG(GPIO96, AF1)
#define GPIO97_PWM2_OUT MFP_CFG(GPIO97, AF1)
#define GPIO98_PWM1_OUT MFP_CFG(GPIO98, AF1)
#define GPIO104_PWM4_OUT MFP_CFG(GPIO104, AF1)
#define GPIO106_PWM2_OUT MFP_CFG(GPIO106, AF2)
#define GPIO74_PWM4_OUT MFP_CFG(GPIO74, AF2)
#define GPIO75_PWM3_OUT MFP_CFG(GPIO75, AF2)
#define GPIO76_PWM2_OUT MFP_CFG(GPIO76, AF2)
#define GPIO77_PWM1_OUT MFP_CFG(GPIO77, AF2)
#define GPIO82_PWM4_OUT MFP_CFG(GPIO82, AF2)
#define GPIO83_PWM3_OUT MFP_CFG(GPIO83, AF2)
#define GPIO84_PWM2_OUT MFP_CFG(GPIO84, AF2)
#define GPIO85_PWM1_OUT MFP_CFG(GPIO85, AF2)
#define GPIO84_PWM1_OUT MFP_CFG(GPIO84, AF4)
#define GPIO122_PWM3_OUT MFP_CFG(GPIO122, AF3)
#define GPIO123_PWM1_OUT MFP_CFG(GPIO123, AF1)
#define GPIO124_PWM2_OUT MFP_CFG(GPIO124, AF1)
#define GPIO125_PWM3_OUT MFP_CFG(GPIO125, AF1)
#define GPIO126_PWM4_OUT MFP_CFG(GPIO126, AF1)
#define GPIO86_PWM1_OUT MFP_CFG(GPIO86, AF2)
#define GPIO86_PWM2_OUT MFP_CFG(GPIO86, AF3)
#endif /* __ASM_MACH_MFP_PXA168_H */ #endif /* __ASM_MACH_MFP_PXA168_H */
...@@ -159,4 +159,12 @@ ...@@ -159,4 +159,12 @@
#define MMC1_CD_MMC1_CD MFP_CFG_DRV(MMC1_CD, AF0, MEDIUM) #define MMC1_CD_MMC1_CD MFP_CFG_DRV(MMC1_CD, AF0, MEDIUM)
#define MMC1_WP_MMC1_WP MFP_CFG_DRV(MMC1_WP, AF0, MEDIUM) #define MMC1_WP_MMC1_WP MFP_CFG_DRV(MMC1_WP, AF0, MEDIUM)
/* PWM */
#define GPIO27 PWM3 AF2 MFP_CFG(GPIO27, AF2)
#define GPIO51_PWM2_OUT MFP_CFG(GPIO51, AF2)
#define GPIO117_PWM1_OUT MFP_CFG(GPIO117, AF2)
#define GPIO118_PWM2_OUT MFP_CFG(GPIO118, AF2)
#define GPIO119_PWM3_OUT MFP_CFG(GPIO119, AF2)
#define GPIO120_PWM4_OUT MFP_CFG(GPIO120, AF2)
#endif /* __ASM_MACH MFP_PXA910_H */ #endif /* __ASM_MACH MFP_PXA910_H */
#ifndef __ASM_MACH_PXA168_H #ifndef __ASM_MACH_PXA168_H
#define __ASM_MACH_PXA168_H #define __ASM_MACH_PXA168_H
#include <linux/i2c.h>
#include <mach/devices.h> #include <mach/devices.h>
#include <plat/i2c.h>
extern struct pxa_device_desc pxa168_device_uart1; extern struct pxa_device_desc pxa168_device_uart1;
extern struct pxa_device_desc pxa168_device_uart2; extern struct pxa_device_desc pxa168_device_uart2;
extern struct pxa_device_desc pxa168_device_twsi0;
extern struct pxa_device_desc pxa168_device_twsi1;
extern struct pxa_device_desc pxa168_device_pwm1;
extern struct pxa_device_desc pxa168_device_pwm2;
extern struct pxa_device_desc pxa168_device_pwm3;
extern struct pxa_device_desc pxa168_device_pwm4;
static inline int pxa168_add_uart(int id) static inline int pxa168_add_uart(int id)
{ {
...@@ -20,4 +28,40 @@ static inline int pxa168_add_uart(int id) ...@@ -20,4 +28,40 @@ static inline int pxa168_add_uart(int id)
return pxa_register_device(d, NULL, 0); return pxa_register_device(d, NULL, 0);
} }
static inline int pxa168_add_twsi(int id, struct i2c_pxa_platform_data *data,
struct i2c_board_info *info, unsigned size)
{
struct pxa_device_desc *d = NULL;
int ret;
switch (id) {
case 0: d = &pxa168_device_twsi0; break;
case 1: d = &pxa168_device_twsi1; break;
default:
return -EINVAL;
}
ret = i2c_register_board_info(id, info, size);
if (ret)
return ret;
return pxa_register_device(d, data, sizeof(*data));
}
static inline int pxa168_add_pwm(int id)
{
struct pxa_device_desc *d = NULL;
switch (id) {
case 1: d = &pxa168_device_pwm1; break;
case 2: d = &pxa168_device_pwm2; break;
case 3: d = &pxa168_device_pwm3; break;
case 4: d = &pxa168_device_pwm4; break;
default:
return -EINVAL;
}
return pxa_register_device(d, NULL, 0);
}
#endif /* __ASM_MACH_PXA168_H */ #endif /* __ASM_MACH_PXA168_H */
#ifndef __ASM_MACH_PXA910_H #ifndef __ASM_MACH_PXA910_H
#define __ASM_MACH_PXA910_H #define __ASM_MACH_PXA910_H
#include <linux/i2c.h>
#include <mach/devices.h> #include <mach/devices.h>
#include <plat/i2c.h>
extern struct pxa_device_desc pxa910_device_uart1; extern struct pxa_device_desc pxa910_device_uart1;
extern struct pxa_device_desc pxa910_device_uart2; extern struct pxa_device_desc pxa910_device_uart2;
extern struct pxa_device_desc pxa910_device_twsi0;
extern struct pxa_device_desc pxa910_device_twsi1;
extern struct pxa_device_desc pxa910_device_pwm1;
extern struct pxa_device_desc pxa910_device_pwm2;
extern struct pxa_device_desc pxa910_device_pwm3;
extern struct pxa_device_desc pxa910_device_pwm4;
static inline int pxa910_add_uart(int id) static inline int pxa910_add_uart(int id)
{ {
...@@ -20,4 +28,40 @@ static inline int pxa910_add_uart(int id) ...@@ -20,4 +28,40 @@ static inline int pxa910_add_uart(int id)
return pxa_register_device(d, NULL, 0); return pxa_register_device(d, NULL, 0);
} }
static inline int pxa910_add_twsi(int id, struct i2c_pxa_platform_data *data,
struct i2c_board_info *info, unsigned size)
{
struct pxa_device_desc *d = NULL;
int ret;
switch (id) {
case 0: d = &pxa910_device_twsi0; break;
case 1: d = &pxa910_device_twsi1; break;
default:
return -EINVAL;
}
ret = i2c_register_board_info(id, info, size);
if (ret)
return ret;
return pxa_register_device(d, data, sizeof(*data));
}
static inline int pxa910_add_pwm(int id)
{
struct pxa_device_desc *d = NULL;
switch (id) {
case 1: d = &pxa910_device_pwm1; break;
case 2: d = &pxa910_device_pwm2; break;
case 3: d = &pxa910_device_pwm3; break;
case 4: d = &pxa910_device_pwm4; break;
default:
return -EINVAL;
}
return pxa_register_device(d, NULL, 0);
}
#endif /* __ASM_MACH_PXA910_H */ #endif /* __ASM_MACH_PXA910_H */
...@@ -22,8 +22,10 @@ ...@@ -22,8 +22,10 @@
#define APBC_PXA168_UART1 APBC_REG(0x000) #define APBC_PXA168_UART1 APBC_REG(0x000)
#define APBC_PXA168_UART2 APBC_REG(0x004) #define APBC_PXA168_UART2 APBC_REG(0x004)
#define APBC_PXA168_GPIO APBC_REG(0x008) #define APBC_PXA168_GPIO APBC_REG(0x008)
#define APBC_PXA168_PWM0 APBC_REG(0x00c) #define APBC_PXA168_PWM1 APBC_REG(0x00c)
#define APBC_PXA168_PWM1 APBC_REG(0x010) #define APBC_PXA168_PWM2 APBC_REG(0x010)
#define APBC_PXA168_PWM3 APBC_REG(0x014)
#define APBC_PXA168_PWM4 APBC_REG(0x018)
#define APBC_PXA168_SSP1 APBC_REG(0x01c) #define APBC_PXA168_SSP1 APBC_REG(0x01c)
#define APBC_PXA168_SSP2 APBC_REG(0x020) #define APBC_PXA168_SSP2 APBC_REG(0x020)
#define APBC_PXA168_RTC APBC_REG(0x028) #define APBC_PXA168_RTC APBC_REG(0x028)
...@@ -48,10 +50,10 @@ ...@@ -48,10 +50,10 @@
#define APBC_PXA910_UART0 APBC_REG(0x000) #define APBC_PXA910_UART0 APBC_REG(0x000)
#define APBC_PXA910_UART1 APBC_REG(0x004) #define APBC_PXA910_UART1 APBC_REG(0x004)
#define APBC_PXA910_GPIO APBC_REG(0x008) #define APBC_PXA910_GPIO APBC_REG(0x008)
#define APBC_PXA910_PWM0 APBC_REG(0x00c) #define APBC_PXA910_PWM1 APBC_REG(0x00c)
#define APBC_PXA910_PWM1 APBC_REG(0x010) #define APBC_PXA910_PWM2 APBC_REG(0x010)
#define APBC_PXA910_PWM2 APBC_REG(0x014) #define APBC_PXA910_PWM3 APBC_REG(0x014)
#define APBC_PXA910_PWM3 APBC_REG(0x018) #define APBC_PXA910_PWM4 APBC_REG(0x018)
#define APBC_PXA910_SSP1 APBC_REG(0x01c) #define APBC_PXA910_SSP1 APBC_REG(0x01c)
#define APBC_PXA910_SSP2 APBC_REG(0x020) #define APBC_PXA910_SSP2 APBC_REG(0x020)
#define APBC_PXA910_IPC APBC_REG(0x024) #define APBC_PXA910_IPC APBC_REG(0x024)
......
...@@ -65,11 +65,23 @@ void __init pxa168_init_irq(void) ...@@ -65,11 +65,23 @@ void __init pxa168_init_irq(void)
/* APB peripheral clocks */ /* APB peripheral clocks */
static APBC_CLK(uart1, PXA168_UART1, 1, 14745600); static APBC_CLK(uart1, PXA168_UART1, 1, 14745600);
static APBC_CLK(uart2, PXA168_UART2, 1, 14745600); static APBC_CLK(uart2, PXA168_UART2, 1, 14745600);
static APBC_CLK(twsi0, PXA168_TWSI0, 1, 33000000);
static APBC_CLK(twsi1, PXA168_TWSI1, 1, 33000000);
static APBC_CLK(pwm1, PXA168_PWM1, 1, 13000000);
static APBC_CLK(pwm2, PXA168_PWM2, 1, 13000000);
static APBC_CLK(pwm3, PXA168_PWM3, 1, 13000000);
static APBC_CLK(pwm4, PXA168_PWM4, 1, 13000000);
/* device and clock bindings */ /* device and clock bindings */
static struct clk_lookup pxa168_clkregs[] = { static struct clk_lookup pxa168_clkregs[] = {
INIT_CLKREG(&clk_uart1, "pxa2xx-uart.0", NULL), INIT_CLKREG(&clk_uart1, "pxa2xx-uart.0", NULL),
INIT_CLKREG(&clk_uart2, "pxa2xx-uart.1", NULL), INIT_CLKREG(&clk_uart2, "pxa2xx-uart.1", NULL),
INIT_CLKREG(&clk_twsi0, "pxa2xx-i2c.0", NULL),
INIT_CLKREG(&clk_twsi1, "pxa2xx-i2c.1", NULL),
INIT_CLKREG(&clk_pwm1, "pxa168-pwm.0", NULL),
INIT_CLKREG(&clk_pwm2, "pxa168-pwm.1", NULL),
INIT_CLKREG(&clk_pwm3, "pxa168-pwm.2", NULL),
INIT_CLKREG(&clk_pwm4, "pxa168-pwm.3", NULL),
}; };
static int __init pxa168_init(void) static int __init pxa168_init(void)
...@@ -109,3 +121,9 @@ struct sys_timer pxa168_timer = { ...@@ -109,3 +121,9 @@ struct sys_timer pxa168_timer = {
/* on-chip devices */ /* on-chip devices */
PXA168_DEVICE(uart1, "pxa2xx-uart", 0, UART1, 0xd4017000, 0x30, 21, 22); PXA168_DEVICE(uart1, "pxa2xx-uart", 0, UART1, 0xd4017000, 0x30, 21, 22);
PXA168_DEVICE(uart2, "pxa2xx-uart", 1, UART2, 0xd4018000, 0x30, 23, 24); PXA168_DEVICE(uart2, "pxa2xx-uart", 1, UART2, 0xd4018000, 0x30, 23, 24);
PXA168_DEVICE(twsi0, "pxa2xx-i2c", 0, TWSI0, 0xd4011000, 0x28);
PXA168_DEVICE(twsi1, "pxa2xx-i2c", 1, TWSI1, 0xd4025000, 0x28);
PXA168_DEVICE(pwm1, "pxa168-pwm", 0, NONE, 0xd401a000, 0x10);
PXA168_DEVICE(pwm2, "pxa168-pwm", 1, NONE, 0xd401a400, 0x10);
PXA168_DEVICE(pwm3, "pxa168-pwm", 2, NONE, 0xd401a800, 0x10);
PXA168_DEVICE(pwm4, "pxa168-pwm", 3, NONE, 0xd401ac00, 0x10);
...@@ -103,11 +103,23 @@ void __init pxa910_init_irq(void) ...@@ -103,11 +103,23 @@ void __init pxa910_init_irq(void)
/* APB peripheral clocks */ /* APB peripheral clocks */
static APBC_CLK(uart1, PXA910_UART0, 1, 14745600); static APBC_CLK(uart1, PXA910_UART0, 1, 14745600);
static APBC_CLK(uart2, PXA910_UART1, 1, 14745600); static APBC_CLK(uart2, PXA910_UART1, 1, 14745600);
static APBC_CLK(twsi0, PXA168_TWSI0, 1, 33000000);
static APBC_CLK(twsi1, PXA168_TWSI1, 1, 33000000);
static APBC_CLK(pwm1, PXA910_PWM1, 1, 13000000);
static APBC_CLK(pwm2, PXA910_PWM2, 1, 13000000);
static APBC_CLK(pwm3, PXA910_PWM3, 1, 13000000);
static APBC_CLK(pwm4, PXA910_PWM4, 1, 13000000);
/* device and clock bindings */ /* device and clock bindings */
static struct clk_lookup pxa910_clkregs[] = { static struct clk_lookup pxa910_clkregs[] = {
INIT_CLKREG(&clk_uart1, "pxa2xx-uart.0", NULL), INIT_CLKREG(&clk_uart1, "pxa2xx-uart.0", NULL),
INIT_CLKREG(&clk_uart2, "pxa2xx-uart.1", NULL), INIT_CLKREG(&clk_uart2, "pxa2xx-uart.1", NULL),
INIT_CLKREG(&clk_twsi0, "pxa2xx-i2c.0", NULL),
INIT_CLKREG(&clk_twsi1, "pxa2xx-i2c.1", NULL),
INIT_CLKREG(&clk_pwm1, "pxa910-pwm.0", NULL),
INIT_CLKREG(&clk_pwm2, "pxa910-pwm.1", NULL),
INIT_CLKREG(&clk_pwm3, "pxa910-pwm.2", NULL),
INIT_CLKREG(&clk_pwm4, "pxa910-pwm.3", NULL),
}; };
static int __init pxa910_init(void) static int __init pxa910_init(void)
...@@ -156,3 +168,9 @@ struct sys_timer pxa910_timer = { ...@@ -156,3 +168,9 @@ struct sys_timer pxa910_timer = {
*/ */
PXA910_DEVICE(uart1, "pxa2xx-uart", 0, UART2, 0xd4017000, 0x30, 21, 22); PXA910_DEVICE(uart1, "pxa2xx-uart", 0, UART2, 0xd4017000, 0x30, 21, 22);
PXA910_DEVICE(uart2, "pxa2xx-uart", 1, UART3, 0xd4018000, 0x30, 23, 24); PXA910_DEVICE(uart2, "pxa2xx-uart", 1, UART3, 0xd4018000, 0x30, 23, 24);
PXA910_DEVICE(twsi0, "pxa2xx-i2c", 0, TWSI0, 0xd4011000, 0x28);
PXA910_DEVICE(twsi1, "pxa2xx-i2c", 1, TWSI1, 0xd4025000, 0x28);
PXA910_DEVICE(pwm1, "pxa910-pwm", 0, NONE, 0xd401a000, 0x10);
PXA910_DEVICE(pwm2, "pxa910-pwm", 1, NONE, 0xd401a400, 0x10);
PXA910_DEVICE(pwm3, "pxa910-pwm", 2, NONE, 0xd401a800, 0x10);
PXA910_DEVICE(pwm4, "pxa910-pwm", 3, NONE, 0xd401ac00, 0x10);
...@@ -51,6 +51,12 @@ config MACH_INTELMOTE2 ...@@ -51,6 +51,12 @@ config MACH_INTELMOTE2
select IWMMXT select IWMMXT
select PXA_HAVE_BOARD_IRQS select PXA_HAVE_BOARD_IRQS
config MACH_STARGATE2
bool "Intel Stargate 2 Platform"
select PXA27x
select IWMMXT
select PXA_HAVE_BOARD_IRQS
config ARCH_LUBBOCK config ARCH_LUBBOCK
bool "Intel DBPXA250 Development Platform" bool "Intel DBPXA250 Development Platform"
select PXA25x select PXA25x
...@@ -88,6 +94,10 @@ config PXA_SHARPSL ...@@ -88,6 +94,10 @@ config PXA_SHARPSL
SL-C3000 (Spitz), SL-C3100 (Borzoi) or SL-C6000x (Tosa) SL-C3000 (Spitz), SL-C3100 (Borzoi) or SL-C6000x (Tosa)
handheld computer. handheld computer.
config SHARPSL_PM
bool
select APM_EMULATION
config CORGI_SSP_DEPRECATED config CORGI_SSP_DEPRECATED
bool bool
select PXA_SSP select PXA_SSP
...@@ -280,6 +290,7 @@ config MACH_ZYLONITE ...@@ -280,6 +290,7 @@ config MACH_ZYLONITE
select PXA3xx select PXA3xx
select PXA_SSP select PXA_SSP
select HAVE_PWM select HAVE_PWM
select PXA_HAVE_BOARD_IRQS
config MACH_LITTLETON config MACH_LITTLETON
bool "PXA3xx Form Factor Platform (aka Littleton)" bool "PXA3xx Form Factor Platform (aka Littleton)"
...@@ -308,6 +319,14 @@ config MACH_CM_X300 ...@@ -308,6 +319,14 @@ config MACH_CM_X300
select PXA3xx select PXA3xx
select CPU_PXA300 select CPU_PXA300
config MACH_H4700
bool "HP iPAQ hx4700"
select PXA27x
select IWMMXT
select PXA_SSP
select HAVE_PWM
select PXA_HAVE_BOARD_IRQS
config MACH_MAGICIAN config MACH_MAGICIAN
bool "Enable HTC Magician Support" bool "Enable HTC Magician Support"
select PXA27x select PXA27x
...@@ -505,12 +524,6 @@ config PXA_SSP ...@@ -505,12 +524,6 @@ config PXA_SSP
help help
Enable support for PXA2xx SSP ports Enable support for PXA2xx SSP ports
config PXA_PWM
tristate
default BACKLIGHT_PWM
help
Enable support for PXA2xx/PXA3xx PWM controllers
config TOSA_BT config TOSA_BT
tristate "Control the state of built-in bluetooth chip on Sharp SL-6000" tristate "Control the state of built-in bluetooth chip on Sharp SL-6000"
depends on MACH_TOSA depends on MACH_TOSA
......
...@@ -15,7 +15,6 @@ endif ...@@ -15,7 +15,6 @@ endif
# Generic drivers that other drivers may depend upon # Generic drivers that other drivers may depend upon
obj-$(CONFIG_PXA_SSP) += ssp.o obj-$(CONFIG_PXA_SSP) += ssp.o
obj-$(CONFIG_PXA_PWM) += pwm.o
# SoC-specific code # SoC-specific code
obj-$(CONFIG_PXA25x) += mfp-pxa2xx.o pxa2xx.o pxa25x.o obj-$(CONFIG_PXA25x) += mfp-pxa2xx.o pxa2xx.o pxa25x.o
...@@ -47,6 +46,7 @@ obj-$(CONFIG_MACH_PCM027) += pcm027.o ...@@ -47,6 +46,7 @@ obj-$(CONFIG_MACH_PCM027) += pcm027.o
obj-$(CONFIG_MACH_PCM990_BASEBOARD) += pcm990-baseboard.o obj-$(CONFIG_MACH_PCM990_BASEBOARD) += pcm990-baseboard.o
obj-$(CONFIG_MACH_TOSA) += tosa.o obj-$(CONFIG_MACH_TOSA) += tosa.o
obj-$(CONFIG_MACH_EM_X270) += em-x270.o obj-$(CONFIG_MACH_EM_X270) += em-x270.o
obj-$(CONFIG_MACH_H4700) += hx4700.o
obj-$(CONFIG_MACH_MAGICIAN) += magician.o obj-$(CONFIG_MACH_MAGICIAN) += magician.o
obj-$(CONFIG_MACH_HIMALAYA) += himalaya.o obj-$(CONFIG_MACH_HIMALAYA) += himalaya.o
obj-$(CONFIG_MACH_MIOA701) += mioa701.o mioa701_bootresume.o obj-$(CONFIG_MACH_MIOA701) += mioa701.o mioa701_bootresume.o
...@@ -78,6 +78,7 @@ obj-$(CONFIG_MACH_CM_X300) += cm-x300.o ...@@ -78,6 +78,7 @@ obj-$(CONFIG_MACH_CM_X300) += cm-x300.o
obj-$(CONFIG_PXA_EZX) += ezx.o obj-$(CONFIG_PXA_EZX) += ezx.o
obj-$(CONFIG_MACH_INTELMOTE2) += imote2.o obj-$(CONFIG_MACH_INTELMOTE2) += imote2.o
obj-$(CONFIG_MACH_STARGATE2) += stargate2.o
obj-$(CONFIG_MACH_CSB726) += csb726.o obj-$(CONFIG_MACH_CSB726) += csb726.o
obj-$(CONFIG_CSB726_CSB701) += csb701.o obj-$(CONFIG_CSB726_CSB701) += csb701.o
......
...@@ -335,6 +335,10 @@ void __init cmx270_init(void) ...@@ -335,6 +335,10 @@ void __init cmx270_init(void)
{ {
pxa2xx_mfp_config(ARRAY_AND_SIZE(cmx270_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(cmx270_pin_config));
#ifdef CONFIG_PM
pxa27x_set_pwrmode(PWRMODE_DEEPSLEEP);
#endif
cmx270_init_rtc(); cmx270_init_rtc();
cmx270_init_mmc(); cmx270_init_mmc();
cmx270_init_ohci(); cmx270_init_ohci();
......
...@@ -21,18 +21,20 @@ ...@@ -21,18 +21,20 @@
#include <linux/gpio.h> #include <linux/gpio.h>
#include <linux/dm9000.h> #include <linux/dm9000.h>
#include <linux/leds.h> #include <linux/leds.h>
#include <linux/rtc-v3020.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/i2c/pca953x.h> #include <linux/i2c/pca953x.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/setup.h>
#include <mach/pxa300.h> #include <mach/pxa300.h>
#include <mach/pxafb.h> #include <mach/pxafb.h>
#include <mach/mmc.h> #include <mach/mmc.h>
#include <mach/ohci.h> #include <mach/ohci.h>
#include <mach/i2c.h> #include <plat/i2c.h>
#include <mach/pxa3xx_nand.h> #include <mach/pxa3xx_nand.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
...@@ -46,6 +48,11 @@ ...@@ -46,6 +48,11 @@
#define CM_X300_MMC2_IRQ IRQ_GPIO(GPIO82_MMC2_IRQ) #define CM_X300_MMC2_IRQ IRQ_GPIO(GPIO82_MMC2_IRQ)
#define GPIO95_RTC_CS (95)
#define GPIO96_RTC_WR (96)
#define GPIO97_RTC_RD (97)
#define GPIO98_RTC_IO (98)
static mfp_cfg_t cm_x300_mfp_cfg[] __initdata = { static mfp_cfg_t cm_x300_mfp_cfg[] __initdata = {
/* LCD */ /* LCD */
GPIO54_LCD_LDD_0, GPIO54_LCD_LDD_0,
...@@ -135,6 +142,12 @@ static mfp_cfg_t cm_x300_mfp_cfg[] __initdata = { ...@@ -135,6 +142,12 @@ static mfp_cfg_t cm_x300_mfp_cfg[] __initdata = {
GPIO85_GPIO, /* MMC WP */ GPIO85_GPIO, /* MMC WP */
GPIO99_GPIO, /* Ethernet IRQ */ GPIO99_GPIO, /* Ethernet IRQ */
/* RTC GPIOs */
GPIO95_GPIO, /* RTC CS */
GPIO96_GPIO, /* RTC WR */
GPIO97_GPIO, /* RTC RD */
GPIO98_GPIO, /* RTC IO */
/* Standard I2C */ /* Standard I2C */
GPIO21_I2C_SCL, GPIO21_I2C_SCL,
GPIO22_I2C_SDA, GPIO22_I2C_SDA,
...@@ -265,6 +278,7 @@ static struct mtd_partition cm_x300_nand_partitions[] = { ...@@ -265,6 +278,7 @@ static struct mtd_partition cm_x300_nand_partitions[] = {
static struct pxa3xx_nand_platform_data cm_x300_nand_info = { static struct pxa3xx_nand_platform_data cm_x300_nand_info = {
.enable_arbiter = 1, .enable_arbiter = 1,
.keep_config = 1,
.parts = cm_x300_nand_partitions, .parts = cm_x300_nand_partitions,
.nr_parts = ARRAY_SIZE(cm_x300_nand_partitions), .nr_parts = ARRAY_SIZE(cm_x300_nand_partitions),
}; };
...@@ -441,6 +455,31 @@ static void __init cm_x300_init_i2c(void) ...@@ -441,6 +455,31 @@ static void __init cm_x300_init_i2c(void)
static inline void cm_x300_init_i2c(void) {} static inline void cm_x300_init_i2c(void) {}
#endif #endif
#if defined(CONFIG_RTC_DRV_V3020) || defined(CONFIG_RTC_DRV_V3020_MODULE)
struct v3020_platform_data cm_x300_v3020_pdata = {
.use_gpio = 1,
.gpio_cs = GPIO95_RTC_CS,
.gpio_wr = GPIO96_RTC_WR,
.gpio_rd = GPIO97_RTC_RD,
.gpio_io = GPIO98_RTC_IO,
};
static struct platform_device cm_x300_rtc_device = {
.name = "v3020",
.id = -1,
.dev = {
.platform_data = &cm_x300_v3020_pdata,
}
};
static void __init cm_x300_init_rtc(void)
{
platform_device_register(&cm_x300_rtc_device);
}
#else
static inline void cm_x300_init_rtc(void) {}
#endif
static void __init cm_x300_init(void) static void __init cm_x300_init(void)
{ {
/* board-processor specific GPIO initialization */ /* board-processor specific GPIO initialization */
...@@ -453,6 +492,19 @@ static void __init cm_x300_init(void) ...@@ -453,6 +492,19 @@ static void __init cm_x300_init(void)
cm_x300_init_nand(); cm_x300_init_nand();
cm_x300_init_leds(); cm_x300_init_leds();
cm_x300_init_i2c(); cm_x300_init_i2c();
cm_x300_init_rtc();
}
static void __init cm_x300_fixup(struct machine_desc *mdesc, struct tag *tags,
char **cmdline, struct meminfo *mi)
{
mi->nr_banks = 2;
mi->bank[0].start = 0xa0000000;
mi->bank[0].node = 0;
mi->bank[0].size = (64*1024*1024);
mi->bank[1].start = 0xc0000000;
mi->bank[1].node = 0;
mi->bank[1].size = (64*1024*1024);
} }
MACHINE_START(CM_X300, "CM-X300 module") MACHINE_START(CM_X300, "CM-X300 module")
...@@ -463,4 +515,5 @@ MACHINE_START(CM_X300, "CM-X300 module") ...@@ -463,4 +515,5 @@ MACHINE_START(CM_X300, "CM-X300 module")
.init_irq = pxa3xx_init_irq, .init_irq = pxa3xx_init_irq,
.timer = &pxa_timer, .timer = &pxa_timer,
.init_machine = cm_x300_init, .init_machine = cm_x300_init,
.fixup = cm_x300_fixup,
MACHINE_END MACHINE_END
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
#include <asm/mach/irq.h> #include <asm/mach/irq.h>
#include <mach/pxa25x.h> #include <mach/pxa25x.h>
#include <mach/i2c.h> #include <plat/i2c.h>
#include <mach/irda.h> #include <mach/irda.h>
#include <mach/mmc.h> #include <mach/mmc.h>
#include <mach/udc.h> #include <mach/udc.h>
...@@ -445,13 +445,8 @@ static struct ads7846_platform_data corgi_ads7846_info = { ...@@ -445,13 +445,8 @@ static struct ads7846_platform_data corgi_ads7846_info = {
.wait_for_sync = corgi_wait_for_hsync, .wait_for_sync = corgi_wait_for_hsync,
}; };
static void corgi_ads7846_cs(u32 command)
{
gpio_set_value(CORGI_GPIO_ADS7846_CS, !(command == PXA2XX_CS_ASSERT));
}
static struct pxa2xx_spi_chip corgi_ads7846_chip = { static struct pxa2xx_spi_chip corgi_ads7846_chip = {
.cs_control = corgi_ads7846_cs, .gpio_cs = CORGI_GPIO_ADS7846_CS,
}; };
static void corgi_bl_kick_battery(void) static void corgi_bl_kick_battery(void)
...@@ -475,22 +470,12 @@ static struct corgi_lcd_platform_data corgi_lcdcon_info = { ...@@ -475,22 +470,12 @@ static struct corgi_lcd_platform_data corgi_lcdcon_info = {
.kick_battery = corgi_bl_kick_battery, .kick_battery = corgi_bl_kick_battery,
}; };
static void corgi_lcdcon_cs(u32 command)
{
gpio_set_value(CORGI_GPIO_LCDCON_CS, !(command == PXA2XX_CS_ASSERT));
}
static struct pxa2xx_spi_chip corgi_lcdcon_chip = { static struct pxa2xx_spi_chip corgi_lcdcon_chip = {
.cs_control = corgi_lcdcon_cs, .gpio_cs = CORGI_GPIO_LCDCON_CS,
}; };
static void corgi_max1111_cs(u32 command)
{
gpio_set_value(CORGI_GPIO_MAX1111_CS, !(command == PXA2XX_CS_ASSERT));
}
static struct pxa2xx_spi_chip corgi_max1111_chip = { static struct pxa2xx_spi_chip corgi_max1111_chip = {
.cs_control = corgi_max1111_cs, .gpio_cs = CORGI_GPIO_MAX1111_CS,
}; };
static struct spi_board_info corgi_spi_devices[] = { static struct spi_board_info corgi_spi_devices[] = {
...@@ -520,32 +505,8 @@ static struct spi_board_info corgi_spi_devices[] = { ...@@ -520,32 +505,8 @@ static struct spi_board_info corgi_spi_devices[] = {
static void __init corgi_init_spi(void) static void __init corgi_init_spi(void)
{ {
int err;
err = gpio_request(CORGI_GPIO_ADS7846_CS, "ADS7846_CS");
if (err)
return;
err = gpio_request(CORGI_GPIO_LCDCON_CS, "LCDCON_CS");
if (err)
goto err_free_1;
err = gpio_request(CORGI_GPIO_MAX1111_CS, "MAX1111_CS");
if (err)
goto err_free_2;
gpio_direction_output(CORGI_GPIO_ADS7846_CS, 1);
gpio_direction_output(CORGI_GPIO_LCDCON_CS, 1);
gpio_direction_output(CORGI_GPIO_MAX1111_CS, 1);
pxa2xx_set_spi_info(1, &corgi_spi_info); pxa2xx_set_spi_info(1, &corgi_spi_info);
spi_register_board_info(ARRAY_AND_SIZE(corgi_spi_devices)); spi_register_board_info(ARRAY_AND_SIZE(corgi_spi_devices));
return;
err_free_2:
gpio_free(CORGI_GPIO_LCDCON_CS);
err_free_1:
gpio_free(CORGI_GPIO_ADS7846_CS);
} }
#else #else
static inline void corgi_init_spi(void) {} static inline void corgi_init_spi(void) {}
......
...@@ -41,7 +41,6 @@ static void corgi_charger_init(void) ...@@ -41,7 +41,6 @@ static void corgi_charger_init(void)
pxa_gpio_mode(CORGI_GPIO_CHRG_ON | GPIO_OUT); pxa_gpio_mode(CORGI_GPIO_CHRG_ON | GPIO_OUT);
pxa_gpio_mode(CORGI_GPIO_CHRG_UKN | GPIO_OUT); pxa_gpio_mode(CORGI_GPIO_CHRG_UKN | GPIO_OUT);
pxa_gpio_mode(CORGI_GPIO_KEY_INT | GPIO_IN); pxa_gpio_mode(CORGI_GPIO_KEY_INT | GPIO_IN);
sharpsl_pm_pxa_init();
} }
static void corgi_measure_temp(int on) static void corgi_measure_temp(int on)
...@@ -191,7 +190,7 @@ unsigned long corgipm_read_devdata(int type) ...@@ -191,7 +190,7 @@ unsigned long corgipm_read_devdata(int type)
static struct sharpsl_charger_machinfo corgi_pm_machinfo = { static struct sharpsl_charger_machinfo corgi_pm_machinfo = {
.init = corgi_charger_init, .init = corgi_charger_init,
.exit = sharpsl_pm_pxa_remove, .exit = NULL,
.gpio_batlock = CORGI_GPIO_BAT_COVER, .gpio_batlock = CORGI_GPIO_BAT_COVER,
.gpio_acin = CORGI_GPIO_AC_IN, .gpio_acin = CORGI_GPIO_AC_IN,
.gpio_batfull = CORGI_GPIO_CHRG_FULL, .gpio_batfull = CORGI_GPIO_CHRG_FULL,
......
...@@ -36,6 +36,8 @@ ...@@ -36,6 +36,8 @@
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/cpufreq.h> #include <linux/cpufreq.h>
#include <linux/err.h>
#include <linux/regulator/consumer.h>
#include <mach/pxa2xx-regs.h> #include <mach/pxa2xx-regs.h>
...@@ -47,6 +49,8 @@ MODULE_PARM_DESC(freq_debug, "Set the debug messages to on=1/off=0"); ...@@ -47,6 +49,8 @@ MODULE_PARM_DESC(freq_debug, "Set the debug messages to on=1/off=0");
#define freq_debug 0 #define freq_debug 0
#endif #endif
static struct regulator *vcc_core;
static unsigned int pxa27x_maxfreq; static unsigned int pxa27x_maxfreq;
module_param(pxa27x_maxfreq, uint, 0); module_param(pxa27x_maxfreq, uint, 0);
MODULE_PARM_DESC(pxa27x_maxfreq, "Set the pxa27x maxfreq in MHz" MODULE_PARM_DESC(pxa27x_maxfreq, "Set the pxa27x maxfreq in MHz"
...@@ -58,6 +62,8 @@ typedef struct { ...@@ -58,6 +62,8 @@ typedef struct {
unsigned int cccr; unsigned int cccr;
unsigned int div2; unsigned int div2;
unsigned int cclkcfg; unsigned int cclkcfg;
int vmin;
int vmax;
} pxa_freqs_t; } pxa_freqs_t;
/* Define the refresh period in mSec for the SDRAM and the number of rows */ /* Define the refresh period in mSec for the SDRAM and the number of rows */
...@@ -82,24 +88,24 @@ static unsigned int sdram_rows; ...@@ -82,24 +88,24 @@ static unsigned int sdram_rows;
static pxa_freqs_t pxa255_run_freqs[] = static pxa_freqs_t pxa255_run_freqs[] =
{ {
/* CPU MEMBUS CCCR DIV2 CCLKCFG run turbo PXbus SDRAM */ /* CPU MEMBUS CCCR DIV2 CCLKCFG run turbo PXbus SDRAM */
{ 99500, 99500, 0x121, 1, CCLKCFG}, /* 99, 99, 50, 50 */ { 99500, 99500, 0x121, 1, CCLKCFG, -1, -1}, /* 99, 99, 50, 50 */
{132700, 132700, 0x123, 1, CCLKCFG}, /* 133, 133, 66, 66 */ {132700, 132700, 0x123, 1, CCLKCFG, -1, -1}, /* 133, 133, 66, 66 */
{199100, 99500, 0x141, 0, CCLKCFG}, /* 199, 199, 99, 99 */ {199100, 99500, 0x141, 0, CCLKCFG, -1, -1}, /* 199, 199, 99, 99 */
{265400, 132700, 0x143, 1, CCLKCFG}, /* 265, 265, 133, 66 */ {265400, 132700, 0x143, 1, CCLKCFG, -1, -1}, /* 265, 265, 133, 66 */
{331800, 165900, 0x145, 1, CCLKCFG}, /* 331, 331, 166, 83 */ {331800, 165900, 0x145, 1, CCLKCFG, -1, -1}, /* 331, 331, 166, 83 */
{398100, 99500, 0x161, 0, CCLKCFG}, /* 398, 398, 196, 99 */ {398100, 99500, 0x161, 0, CCLKCFG, -1, -1}, /* 398, 398, 196, 99 */
}; };
/* Use the turbo mode frequencies for the CPUFREQ_POLICY_POWERSAVE policy */ /* Use the turbo mode frequencies for the CPUFREQ_POLICY_POWERSAVE policy */
static pxa_freqs_t pxa255_turbo_freqs[] = static pxa_freqs_t pxa255_turbo_freqs[] =
{ {
/* CPU MEMBUS CCCR DIV2 CCLKCFG run turbo PXbus SDRAM */ /* CPU MEMBUS CCCR DIV2 CCLKCFG run turbo PXbus SDRAM */
{ 99500, 99500, 0x121, 1, CCLKCFG}, /* 99, 99, 50, 50 */ { 99500, 99500, 0x121, 1, CCLKCFG, -1, -1}, /* 99, 99, 50, 50 */
{199100, 99500, 0x221, 0, CCLKCFG}, /* 99, 199, 50, 99 */ {199100, 99500, 0x221, 0, CCLKCFG, -1, -1}, /* 99, 199, 50, 99 */
{298500, 99500, 0x321, 0, CCLKCFG}, /* 99, 287, 50, 99 */ {298500, 99500, 0x321, 0, CCLKCFG, -1, -1}, /* 99, 287, 50, 99 */
{298600, 99500, 0x1c1, 0, CCLKCFG}, /* 199, 287, 99, 99 */ {298600, 99500, 0x1c1, 0, CCLKCFG, -1, -1}, /* 199, 287, 99, 99 */
{398100, 99500, 0x241, 0, CCLKCFG}, /* 199, 398, 99, 99 */ {398100, 99500, 0x241, 0, CCLKCFG, -1, -1}, /* 199, 398, 99, 99 */
}; };
#define NUM_PXA25x_RUN_FREQS ARRAY_SIZE(pxa255_run_freqs) #define NUM_PXA25x_RUN_FREQS ARRAY_SIZE(pxa255_run_freqs)
...@@ -148,13 +154,13 @@ MODULE_PARM_DESC(pxa255_turbo_table, "Selects the frequency table (0 = run table ...@@ -148,13 +154,13 @@ MODULE_PARM_DESC(pxa255_turbo_table, "Selects the frequency table (0 = run table
((T) ? CCLKCFG_TURBO : 0)) ((T) ? CCLKCFG_TURBO : 0))
static pxa_freqs_t pxa27x_freqs[] = { static pxa_freqs_t pxa27x_freqs[] = {
{104000, 104000, PXA27x_CCCR(1, 8, 2), 0, CCLKCFG2(1, 0, 1)}, {104000, 104000, PXA27x_CCCR(1, 8, 2), 0, CCLKCFG2(1, 0, 1), 900000, 1705000 },
{156000, 104000, PXA27x_CCCR(1, 8, 6), 0, CCLKCFG2(1, 1, 1)}, {156000, 104000, PXA27x_CCCR(1, 8, 6), 0, CCLKCFG2(1, 1, 1), 1000000, 1705000 },
{208000, 208000, PXA27x_CCCR(0, 16, 2), 1, CCLKCFG2(0, 0, 1)}, {208000, 208000, PXA27x_CCCR(0, 16, 2), 1, CCLKCFG2(0, 0, 1), 1180000, 1705000 },
{312000, 208000, PXA27x_CCCR(1, 16, 3), 1, CCLKCFG2(1, 0, 1)}, {312000, 208000, PXA27x_CCCR(1, 16, 3), 1, CCLKCFG2(1, 0, 1), 1250000, 1705000 },
{416000, 208000, PXA27x_CCCR(1, 16, 4), 1, CCLKCFG2(1, 0, 1)}, {416000, 208000, PXA27x_CCCR(1, 16, 4), 1, CCLKCFG2(1, 0, 1), 1350000, 1705000 },
{520000, 208000, PXA27x_CCCR(1, 16, 5), 1, CCLKCFG2(1, 0, 1)}, {520000, 208000, PXA27x_CCCR(1, 16, 5), 1, CCLKCFG2(1, 0, 1), 1450000, 1705000 },
{624000, 208000, PXA27x_CCCR(1, 16, 6), 1, CCLKCFG2(1, 0, 1)} {624000, 208000, PXA27x_CCCR(1, 16, 6), 1, CCLKCFG2(1, 0, 1), 1550000, 1705000 }
}; };
#define NUM_PXA27x_FREQS ARRAY_SIZE(pxa27x_freqs) #define NUM_PXA27x_FREQS ARRAY_SIZE(pxa27x_freqs)
...@@ -163,6 +169,47 @@ static struct cpufreq_frequency_table ...@@ -163,6 +169,47 @@ static struct cpufreq_frequency_table
extern unsigned get_clk_frequency_khz(int info); extern unsigned get_clk_frequency_khz(int info);
#ifdef CONFIG_REGULATOR
static int pxa_cpufreq_change_voltage(pxa_freqs_t *pxa_freq)
{
int ret = 0;
int vmin, vmax;
if (!cpu_is_pxa27x())
return 0;
vmin = pxa_freq->vmin;
vmax = pxa_freq->vmax;
if ((vmin == -1) || (vmax == -1))
return 0;
ret = regulator_set_voltage(vcc_core, vmin, vmax);
if (ret)
pr_err("cpufreq: Failed to set vcc_core in [%dmV..%dmV]\n",
vmin, vmax);
return ret;
}
static __init void pxa_cpufreq_init_voltages(void)
{
vcc_core = regulator_get(NULL, "vcc_core");
if (IS_ERR(vcc_core)) {
pr_info("cpufreq: Didn't find vcc_core regulator\n");
vcc_core = NULL;
} else {
pr_info("cpufreq: Found vcc_core regulator\n");
}
}
#else
static int pxa_cpufreq_change_voltage(pxa_freqs_t *pxa_freq)
{
return 0;
}
static __init void pxa_cpufreq_init_voltages(void) { }
#endif
static void find_freq_tables(struct cpufreq_frequency_table **freq_table, static void find_freq_tables(struct cpufreq_frequency_table **freq_table,
pxa_freqs_t **pxa_freqs) pxa_freqs_t **pxa_freqs)
{ {
...@@ -251,6 +298,7 @@ static int pxa_set_target(struct cpufreq_policy *policy, ...@@ -251,6 +298,7 @@ static int pxa_set_target(struct cpufreq_policy *policy,
unsigned long flags; unsigned long flags;
unsigned int new_freq_cpu, new_freq_mem; unsigned int new_freq_cpu, new_freq_mem;
unsigned int unused, preset_mdrefr, postset_mdrefr, cclkcfg; unsigned int unused, preset_mdrefr, postset_mdrefr, cclkcfg;
int ret = 0;
/* Get the current policy */ /* Get the current policy */
find_freq_tables(&pxa_freqs_table, &pxa_freq_settings); find_freq_tables(&pxa_freqs_table, &pxa_freq_settings);
...@@ -273,6 +321,10 @@ static int pxa_set_target(struct cpufreq_policy *policy, ...@@ -273,6 +321,10 @@ static int pxa_set_target(struct cpufreq_policy *policy,
freqs.new / 1000, (pxa_freq_settings[idx].div2) ? freqs.new / 1000, (pxa_freq_settings[idx].div2) ?
(new_freq_mem / 2000) : (new_freq_mem / 1000)); (new_freq_mem / 2000) : (new_freq_mem / 1000));
if (vcc_core && freqs.new > freqs.old)
ret = pxa_cpufreq_change_voltage(&pxa_freq_settings[idx]);
if (ret)
return ret;
/* /*
* Tell everyone what we're about to do... * Tell everyone what we're about to do...
* you should add a notify client with any platform specific * you should add a notify client with any platform specific
...@@ -335,6 +387,18 @@ static int pxa_set_target(struct cpufreq_policy *policy, ...@@ -335,6 +387,18 @@ static int pxa_set_target(struct cpufreq_policy *policy,
*/ */
cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
/*
* Even if voltage setting fails, we don't report it, as the frequency
* change succeeded. The voltage reduction is not a critical failure,
* only power savings will suffer from this.
*
* Note: if the voltage change fails, and a return value is returned, a
* bug is triggered (seems a deadlock). Should anybody find out where,
* the "return 0" should become a "return ret".
*/
if (vcc_core && freqs.new < freqs.old)
ret = pxa_cpufreq_change_voltage(&pxa_freq_settings[idx]);
return 0; return 0;
} }
...@@ -349,6 +413,8 @@ static __init int pxa_cpufreq_init(struct cpufreq_policy *policy) ...@@ -349,6 +413,8 @@ static __init int pxa_cpufreq_init(struct cpufreq_policy *policy)
if (cpu_is_pxa27x()) if (cpu_is_pxa27x())
pxa27x_guess_max_freq(); pxa27x_guess_max_freq();
pxa_cpufreq_init_voltages();
init_sdram_rows(); init_sdram_rows();
/* set default policy and cpuinfo */ /* set default policy and cpuinfo */
......
...@@ -16,15 +16,17 @@ ...@@ -16,15 +16,17 @@
#include <linux/mtd/physmap.h> #include <linux/mtd/physmap.h>
#include <linux/mtd/partitions.h> #include <linux/mtd/partitions.h>
#include <linux/sm501.h> #include <linux/sm501.h>
#include <linux/smsc911x.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <mach/csb726.h> #include <mach/csb726.h>
#include <mach/mfp-pxa27x.h> #include <mach/mfp-pxa27x.h>
#include <mach/i2c.h> #include <plat/i2c.h>
#include <mach/mmc.h> #include <mach/mmc.h>
#include <mach/ohci.h> #include <mach/ohci.h>
#include <mach/pxa2xx-regs.h> #include <mach/pxa2xx-regs.h>
#include <mach/audio.h>
#include "generic.h" #include "generic.h"
#include "devices.h" #include "devices.h"
...@@ -275,15 +277,26 @@ static struct resource csb726_lan_resources[] = { ...@@ -275,15 +277,26 @@ static struct resource csb726_lan_resources[] = {
{ {
.start = CSB726_IRQ_LAN, .start = CSB726_IRQ_LAN,
.end = CSB726_IRQ_LAN, .end = CSB726_IRQ_LAN,
.flags = IORESOURCE_IRQ, .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWEDGE,
}, },
}; };
struct smsc911x_platform_config csb726_lan_config = {
.irq_type = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
.irq_type = SMSC911X_IRQ_TYPE_PUSH_PULL,
.flags = SMSC911X_USE_32BIT,
.phy_interface = PHY_INTERFACE_MODE_MII,
};
static struct platform_device csb726_lan = { static struct platform_device csb726_lan = {
.name = "smc911x", .name = "smsc911x",
.id = -1, .id = -1,
.num_resources = ARRAY_SIZE(csb726_lan_resources), .num_resources = ARRAY_SIZE(csb726_lan_resources),
.resource = csb726_lan_resources, .resource = csb726_lan_resources,
.dev = {
.platform_data = &csb726_lan_config,
},
}; };
static struct platform_device *devices[] __initdata = { static struct platform_device *devices[] __initdata = {
...@@ -303,6 +316,7 @@ static void __init csb726_init(void) ...@@ -303,6 +316,7 @@ static void __init csb726_init(void)
pxa27x_set_i2c_power_info(NULL); pxa27x_set_i2c_power_info(NULL);
pxa_set_mci_info(&csb726_mci); pxa_set_mci_info(&csb726_mci);
pxa_set_ohci_info(&csb726_ohci_platform_data); pxa_set_ohci_info(&csb726_ohci_platform_data);
pxa_set_ac97_info(NULL);
platform_add_devices(devices, ARRAY_SIZE(devices)); platform_add_devices(devices, ARRAY_SIZE(devices));
} }
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
#include <mach/pxafb.h> #include <mach/pxafb.h>
#include <mach/mmc.h> #include <mach/mmc.h>
#include <mach/irda.h> #include <mach/irda.h>
#include <mach/i2c.h> #include <plat/i2c.h>
#include <mach/ohci.h> #include <mach/ohci.h>
#include <mach/pxa27x_keypad.h> #include <mach/pxa27x_keypad.h>
#include <mach/pxa2xx_spi.h> #include <mach/pxa2xx_spi.h>
...@@ -287,7 +287,7 @@ static struct resource pxa3xx_resources_i2c_power[] = { ...@@ -287,7 +287,7 @@ static struct resource pxa3xx_resources_i2c_power[] = {
}; };
struct platform_device pxa3xx_device_i2c_power = { struct platform_device pxa3xx_device_i2c_power = {
.name = "pxa2xx-i2c", .name = "pxa3xx-pwri2c",
.id = 1, .id = 1,
.resource = pxa3xx_resources_i2c_power, .resource = pxa3xx_resources_i2c_power,
.num_resources = ARRAY_SIZE(pxa3xx_resources_i2c_power), .num_resources = ARRAY_SIZE(pxa3xx_resources_i2c_power),
......
...@@ -28,6 +28,8 @@ ...@@ -28,6 +28,8 @@
#include <linux/spi/libertas_spi.h> #include <linux/spi/libertas_spi.h>
#include <linux/power_supply.h> #include <linux/power_supply.h>
#include <linux/apm-emulation.h> #include <linux/apm-emulation.h>
#include <linux/i2c.h>
#include <linux/i2c/pca953x.h>
#include <media/soc_camera.h> #include <media/soc_camera.h>
...@@ -41,7 +43,7 @@ ...@@ -41,7 +43,7 @@
#include <mach/ohci.h> #include <mach/ohci.h>
#include <mach/mmc.h> #include <mach/mmc.h>
#include <mach/pxa27x_keypad.h> #include <mach/pxa27x_keypad.h>
#include <mach/i2c.h> #include <plat/i2c.h>
#include <mach/camera.h> #include <mach/camera.h>
#include <mach/pxa2xx_spi.h> #include <mach/pxa2xx_spi.h>
...@@ -52,23 +54,31 @@ ...@@ -52,23 +54,31 @@
#define GPIO13_MMC_CD (13) #define GPIO13_MMC_CD (13)
#define GPIO95_MMC_WP (95) #define GPIO95_MMC_WP (95)
#define GPIO56_NAND_RB (56) #define GPIO56_NAND_RB (56)
#define GPIO93_CAM_RESET (93)
#define GPIO16_USB_HUB_RESET (16)
/* eXeda specific GPIOs */ /* eXeda specific GPIOs */
#define GPIO114_MMC_CD (114) #define GPIO114_MMC_CD (114)
#define GPIO20_NAND_RB (20) #define GPIO20_NAND_RB (20)
#define GPIO38_SD_PWEN (38) #define GPIO38_SD_PWEN (38)
#define GPIO37_WLAN_RST (37)
#define GPIO95_TOUCHPAD_INT (95)
#define GPIO130_CAM_RESET (130)
#define GPIO10_USB_HUB_RESET (10)
/* common GPIOs */ /* common GPIOs */
#define GPIO11_NAND_CS (11) #define GPIO11_NAND_CS (11)
#define GPIO93_CAM_RESET (93)
#define GPIO41_ETHIRQ (41) #define GPIO41_ETHIRQ (41)
#define EM_X270_ETHIRQ IRQ_GPIO(GPIO41_ETHIRQ) #define EM_X270_ETHIRQ IRQ_GPIO(GPIO41_ETHIRQ)
#define GPIO115_WLAN_PWEN (115) #define GPIO115_WLAN_PWEN (115)
#define GPIO19_WLAN_STRAP (19) #define GPIO19_WLAN_STRAP (19)
#define GPIO9_USB_VBUS_EN (9)
static int mmc_cd; static int mmc_cd;
static int nand_rb; static int nand_rb;
static int dm9000_flags; static int dm9000_flags;
static int cam_reset;
static int usb_hub_reset;
static unsigned long common_pin_config[] = { static unsigned long common_pin_config[] = {
/* AC'97 */ /* AC'97 */
...@@ -180,7 +190,6 @@ static unsigned long common_pin_config[] = { ...@@ -180,7 +190,6 @@ static unsigned long common_pin_config[] = {
/* power controls */ /* power controls */
GPIO20_GPIO | MFP_LPM_DRIVE_LOW, /* GPRS_PWEN */ GPIO20_GPIO | MFP_LPM_DRIVE_LOW, /* GPRS_PWEN */
GPIO93_GPIO | MFP_LPM_DRIVE_LOW, /* Camera reset */
GPIO115_GPIO | MFP_LPM_DRIVE_LOW, /* WLAN_PWEN */ GPIO115_GPIO | MFP_LPM_DRIVE_LOW, /* WLAN_PWEN */
/* NAND controls */ /* NAND controls */
...@@ -191,14 +200,18 @@ static unsigned long common_pin_config[] = { ...@@ -191,14 +200,18 @@ static unsigned long common_pin_config[] = {
}; };
static unsigned long em_x270_pin_config[] = { static unsigned long em_x270_pin_config[] = {
GPIO13_GPIO, /* MMC card detect */ GPIO13_GPIO, /* MMC card detect */
GPIO56_GPIO, /* NAND Ready/Busy */ GPIO16_GPIO, /* USB hub reset */
GPIO95_GPIO, /* MMC Write protect */ GPIO56_GPIO, /* NAND Ready/Busy */
GPIO93_GPIO | MFP_LPM_DRIVE_LOW, /* Camera reset */
GPIO95_GPIO, /* MMC Write protect */
}; };
static unsigned long exeda_pin_config[] = { static unsigned long exeda_pin_config[] = {
GPIO10_GPIO, /* USB hub reset */
GPIO20_GPIO, /* NAND Ready/Busy */ GPIO20_GPIO, /* NAND Ready/Busy */
GPIO38_GPIO | MFP_LPM_DRIVE_LOW, /* SD slot power */ GPIO38_GPIO | MFP_LPM_DRIVE_LOW, /* SD slot power */
GPIO95_GPIO, /* touchpad IRQ */
GPIO114_GPIO, /* MMC card detect */ GPIO114_GPIO, /* MMC card detect */
}; };
...@@ -464,18 +477,79 @@ static inline void em_x270_init_nor(void) {} ...@@ -464,18 +477,79 @@ static inline void em_x270_init_nor(void) {}
/* PXA27x OHCI controller setup */ /* PXA27x OHCI controller setup */
#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) #if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
static struct regulator *em_x270_usb_ldo;
static int em_x270_usb_hub_init(void)
{
int err;
em_x270_usb_ldo = regulator_get(NULL, "vcc usb");
if (IS_ERR(em_x270_usb_ldo))
return PTR_ERR(em_x270_usb_ldo);
err = gpio_request(GPIO9_USB_VBUS_EN, "vbus en");
if (err)
goto err_free_usb_ldo;
err = gpio_request(usb_hub_reset, "hub rst");
if (err)
goto err_free_vbus_gpio;
/* USB Hub power-on and reset */
gpio_direction_output(usb_hub_reset, 0);
regulator_enable(em_x270_usb_ldo);
gpio_set_value(usb_hub_reset, 1);
gpio_set_value(usb_hub_reset, 0);
regulator_disable(em_x270_usb_ldo);
regulator_enable(em_x270_usb_ldo);
gpio_set_value(usb_hub_reset, 1);
/* enable VBUS */
gpio_direction_output(GPIO9_USB_VBUS_EN, 1);
return 0;
err_free_vbus_gpio:
gpio_free(GPIO9_USB_VBUS_EN);
err_free_usb_ldo:
regulator_put(em_x270_usb_ldo);
return err;
}
static int em_x270_ohci_init(struct device *dev) static int em_x270_ohci_init(struct device *dev)
{ {
int err;
/* we don't want to entirely disable USB if the HUB init failed */
err = em_x270_usb_hub_init();
if (err)
pr_err("USB Hub initialization failed: %d\n", err);
/* enable port 2 transiever */ /* enable port 2 transiever */
UP2OCR = UP2OCR_HXS | UP2OCR_HXOE; UP2OCR = UP2OCR_HXS | UP2OCR_HXOE;
return 0; return 0;
} }
static void em_x270_ohci_exit(struct device *dev)
{
gpio_free(usb_hub_reset);
gpio_free(GPIO9_USB_VBUS_EN);
if (!IS_ERR(em_x270_usb_ldo)) {
if (regulator_is_enabled(em_x270_usb_ldo))
regulator_disable(em_x270_usb_ldo);
regulator_put(em_x270_usb_ldo);
}
}
static struct pxaohci_platform_data em_x270_ohci_platform_data = { static struct pxaohci_platform_data em_x270_ohci_platform_data = {
.port_mode = PMM_PERPORT_MODE, .port_mode = PMM_PERPORT_MODE,
.flags = ENABLE_PORT1 | ENABLE_PORT2 | POWER_CONTROL_LOW, .flags = ENABLE_PORT1 | ENABLE_PORT2 | POWER_CONTROL_LOW,
.init = em_x270_ohci_init, .init = em_x270_ohci_init,
.exit = em_x270_ohci_exit,
}; };
static void __init em_x270_init_ohci(void) static void __init em_x270_init_ohci(void)
...@@ -677,26 +751,52 @@ static int em_x270_libertas_setup(struct spi_device *spi) ...@@ -677,26 +751,52 @@ static int em_x270_libertas_setup(struct spi_device *spi)
if (err) if (err)
return err; return err;
err = gpio_request(GPIO19_WLAN_STRAP, "WLAN STRAP");
if (err)
goto err_free_pwen;
if (machine_is_exeda()) {
err = gpio_request(GPIO37_WLAN_RST, "WLAN RST");
if (err)
goto err_free_strap;
gpio_direction_output(GPIO37_WLAN_RST, 1);
msleep(100);
}
gpio_direction_output(GPIO19_WLAN_STRAP, 1); gpio_direction_output(GPIO19_WLAN_STRAP, 1);
mdelay(100); msleep(100);
pxa2xx_mfp_config(ARRAY_AND_SIZE(em_x270_libertas_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(em_x270_libertas_pin_config));
gpio_direction_output(GPIO115_WLAN_PWEN, 0); gpio_direction_output(GPIO115_WLAN_PWEN, 0);
mdelay(100); msleep(100);
gpio_set_value(GPIO115_WLAN_PWEN, 1); gpio_set_value(GPIO115_WLAN_PWEN, 1);
mdelay(100); msleep(100);
spi->bits_per_word = 16; spi->bits_per_word = 16;
spi_setup(spi); spi_setup(spi);
return 0; return 0;
err_free_strap:
gpio_free(GPIO19_WLAN_STRAP);
err_free_pwen:
gpio_free(GPIO115_WLAN_PWEN);
return err;
} }
static int em_x270_libertas_teardown(struct spi_device *spi) static int em_x270_libertas_teardown(struct spi_device *spi)
{ {
gpio_set_value(GPIO115_WLAN_PWEN, 0); gpio_set_value(GPIO115_WLAN_PWEN, 0);
gpio_free(GPIO115_WLAN_PWEN); gpio_free(GPIO115_WLAN_PWEN);
gpio_free(GPIO19_WLAN_STRAP);
if (machine_is_exeda()) {
gpio_set_value(GPIO37_WLAN_RST, 0);
gpio_free(GPIO37_WLAN_RST);
}
return 0; return 0;
} }
...@@ -863,26 +963,26 @@ static int em_x270_sensor_init(struct device *dev) ...@@ -863,26 +963,26 @@ static int em_x270_sensor_init(struct device *dev)
{ {
int ret; int ret;
ret = gpio_request(GPIO93_CAM_RESET, "camera reset"); ret = gpio_request(cam_reset, "camera reset");
if (ret) if (ret)
return ret; return ret;
gpio_direction_output(GPIO93_CAM_RESET, 0); gpio_direction_output(cam_reset, 0);
em_x270_camera_ldo = regulator_get(NULL, "vcc cam"); em_x270_camera_ldo = regulator_get(NULL, "vcc cam");
if (em_x270_camera_ldo == NULL) { if (em_x270_camera_ldo == NULL) {
gpio_free(GPIO93_CAM_RESET); gpio_free(cam_reset);
return -ENODEV; return -ENODEV;
} }
ret = regulator_enable(em_x270_camera_ldo); ret = regulator_enable(em_x270_camera_ldo);
if (ret) { if (ret) {
regulator_put(em_x270_camera_ldo); regulator_put(em_x270_camera_ldo);
gpio_free(GPIO93_CAM_RESET); gpio_free(cam_reset);
return ret; return ret;
} }
gpio_set_value(GPIO93_CAM_RESET, 1); gpio_set_value(cam_reset, 1);
return 0; return 0;
} }
...@@ -902,7 +1002,7 @@ static int em_x270_sensor_power(struct device *dev, int on) ...@@ -902,7 +1002,7 @@ static int em_x270_sensor_power(struct device *dev, int on)
if (on == is_on) if (on == is_on)
return 0; return 0;
gpio_set_value(GPIO93_CAM_RESET, !on); gpio_set_value(cam_reset, !on);
if (on) if (on)
ret = regulator_enable(em_x270_camera_ldo); ret = regulator_enable(em_x270_camera_ldo);
...@@ -912,7 +1012,7 @@ static int em_x270_sensor_power(struct device *dev, int on) ...@@ -912,7 +1012,7 @@ static int em_x270_sensor_power(struct device *dev, int on)
if (ret) if (ret)
return ret; return ret;
gpio_set_value(GPIO93_CAM_RESET, on); gpio_set_value(cam_reset, on);
return 0; return 0;
} }
...@@ -929,13 +1029,8 @@ static struct i2c_board_info em_x270_i2c_cam_info[] = { ...@@ -929,13 +1029,8 @@ static struct i2c_board_info em_x270_i2c_cam_info[] = {
}, },
}; };
static struct i2c_pxa_platform_data em_x270_i2c_info = {
.fast_mode = 1,
};
static void __init em_x270_init_camera(void) static void __init em_x270_init_camera(void)
{ {
pxa_set_i2c_info(&em_x270_i2c_info);
i2c_register_board_info(0, ARRAY_AND_SIZE(em_x270_i2c_cam_info)); i2c_register_board_info(0, ARRAY_AND_SIZE(em_x270_i2c_cam_info));
pxa_set_camera_info(&em_x270_camera_platform_data); pxa_set_camera_info(&em_x270_camera_platform_data);
} }
...@@ -985,7 +1080,7 @@ struct led_info em_x270_led_info = { ...@@ -985,7 +1080,7 @@ struct led_info em_x270_led_info = {
}; };
struct power_supply_info em_x270_psy_info = { struct power_supply_info em_x270_psy_info = {
.name = "LP555597P6H-FPS", .name = "battery",
.technology = POWER_SUPPLY_TECHNOLOGY_LIPO, .technology = POWER_SUPPLY_TECHNOLOGY_LIPO,
.voltage_max_design = 4200000, .voltage_max_design = 4200000,
.voltage_min_design = 3000000, .voltage_min_design = 3000000,
...@@ -1069,6 +1164,29 @@ static void __init em_x270_init_da9030(void) ...@@ -1069,6 +1164,29 @@ static void __init em_x270_init_da9030(void)
i2c_register_board_info(1, &em_x270_i2c_pmic_info, 1); i2c_register_board_info(1, &em_x270_i2c_pmic_info, 1);
} }
static struct pca953x_platform_data exeda_gpio_ext_pdata = {
.gpio_base = 128,
};
static struct i2c_board_info exeda_i2c_info[] = {
{
I2C_BOARD_INFO("pca9555", 0x21),
.platform_data = &exeda_gpio_ext_pdata,
},
};
static struct i2c_pxa_platform_data em_x270_i2c_info = {
.fast_mode = 1,
};
static void __init em_x270_init_i2c(void)
{
pxa_set_i2c_info(&em_x270_i2c_info);
if (machine_is_exeda())
i2c_register_board_info(0, ARRAY_AND_SIZE(exeda_i2c_info));
}
static void __init em_x270_module_init(void) static void __init em_x270_module_init(void)
{ {
pr_info("%s\n", __func__); pr_info("%s\n", __func__);
...@@ -1077,6 +1195,8 @@ static void __init em_x270_module_init(void) ...@@ -1077,6 +1195,8 @@ static void __init em_x270_module_init(void)
mmc_cd = GPIO13_MMC_CD; mmc_cd = GPIO13_MMC_CD;
nand_rb = GPIO56_NAND_RB; nand_rb = GPIO56_NAND_RB;
dm9000_flags = DM9000_PLATF_32BITONLY; dm9000_flags = DM9000_PLATF_32BITONLY;
cam_reset = GPIO93_CAM_RESET;
usb_hub_reset = GPIO16_USB_HUB_RESET;
} }
static void __init em_x270_exeda_init(void) static void __init em_x270_exeda_init(void)
...@@ -1087,12 +1207,18 @@ static void __init em_x270_exeda_init(void) ...@@ -1087,12 +1207,18 @@ static void __init em_x270_exeda_init(void)
mmc_cd = GPIO114_MMC_CD; mmc_cd = GPIO114_MMC_CD;
nand_rb = GPIO20_NAND_RB; nand_rb = GPIO20_NAND_RB;
dm9000_flags = DM9000_PLATF_16BITONLY; dm9000_flags = DM9000_PLATF_16BITONLY;
cam_reset = GPIO130_CAM_RESET;
usb_hub_reset = GPIO10_USB_HUB_RESET;
} }
static void __init em_x270_init(void) static void __init em_x270_init(void)
{ {
pxa2xx_mfp_config(ARRAY_AND_SIZE(common_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(common_pin_config));
#ifdef CONFIG_PM
pxa27x_set_pwrmode(PWRMODE_DEEPSLEEP);
#endif
if (machine_is_em_x270()) if (machine_is_em_x270())
em_x270_module_init(); em_x270_module_init();
else if (machine_is_exeda()) else if (machine_is_exeda())
...@@ -1111,8 +1237,9 @@ static void __init em_x270_init(void) ...@@ -1111,8 +1237,9 @@ static void __init em_x270_init(void)
em_x270_init_keypad(); em_x270_init_keypad();
em_x270_init_gpio_keys(); em_x270_init_gpio_keys();
em_x270_init_ac97(); em_x270_init_ac97();
em_x270_init_camera();
em_x270_init_spi(); em_x270_init_spi();
em_x270_init_i2c();
em_x270_init_camera();
} }
MACHINE_START(EM_X270, "Compulab EM-X270") MACHINE_START(EM_X270, "Compulab EM-X270")
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/pwm_backlight.h> #include <linux/pwm_backlight.h>
#include <linux/input.h> #include <linux/input.h>
#include <linux/gpio_keys.h>
#include <asm/setup.h> #include <asm/setup.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
...@@ -25,13 +26,19 @@ ...@@ -25,13 +26,19 @@
#include <mach/pxa27x.h> #include <mach/pxa27x.h>
#include <mach/pxafb.h> #include <mach/pxafb.h>
#include <mach/ohci.h> #include <mach/ohci.h>
#include <mach/i2c.h> #include <plat/i2c.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include <mach/pxa27x_keypad.h> #include <mach/pxa27x_keypad.h>
#include "devices.h" #include "devices.h"
#include "generic.h" #include "generic.h"
#define GPIO12_A780_FLIP_LID 12
#define GPIO15_A1200_FLIP_LID 15
#define GPIO15_A910_FLIP_LID 15
#define GPIO12_E680_LOCK_SWITCH 12
#define GPIO15_E6_LOCK_SWITCH 15
static struct platform_pwm_backlight_data ezx_backlight_data = { static struct platform_pwm_backlight_data ezx_backlight_data = {
.pwm_id = 0, .pwm_id = 0,
.max_brightness = 1023, .max_brightness = 1023,
...@@ -88,7 +95,7 @@ static struct pxafb_mach_info ezx_fb_info_2 = { ...@@ -88,7 +95,7 @@ static struct pxafb_mach_info ezx_fb_info_2 = {
.lcd_conn = LCD_COLOR_TFT_18BPP, .lcd_conn = LCD_COLOR_TFT_18BPP,
}; };
static struct platform_device *devices[] __initdata = { static struct platform_device *ezx_devices[] __initdata = {
&ezx_backlight_device, &ezx_backlight_device,
}; };
...@@ -651,6 +658,35 @@ static struct pxa27x_keypad_platform_data e2_keypad_platform_data = { ...@@ -651,6 +658,35 @@ static struct pxa27x_keypad_platform_data e2_keypad_platform_data = {
#endif /* CONFIG_MACH_EZX_E2 */ #endif /* CONFIG_MACH_EZX_E2 */
#ifdef CONFIG_MACH_EZX_A780 #ifdef CONFIG_MACH_EZX_A780
/* gpio_keys */
static struct gpio_keys_button a780_buttons[] = {
[0] = {
.code = SW_LID,
.gpio = GPIO12_A780_FLIP_LID,
.active_low = 0,
.desc = "A780 flip lid",
.type = EV_SW,
.wakeup = 1,
},
};
static struct gpio_keys_platform_data a780_gpio_keys_platform_data = {
.buttons = a780_buttons,
.nbuttons = ARRAY_SIZE(a780_buttons),
};
static struct platform_device a780_gpio_keys = {
.name = "gpio-keys",
.id = -1,
.dev = {
.platform_data = &a780_gpio_keys_platform_data,
},
};
static struct platform_device *a780_devices[] __initdata = {
&a780_gpio_keys,
};
static void __init a780_init(void) static void __init a780_init(void)
{ {
pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config));
...@@ -663,7 +699,8 @@ static void __init a780_init(void) ...@@ -663,7 +699,8 @@ static void __init a780_init(void)
pxa_set_keypad_info(&a780_keypad_platform_data); pxa_set_keypad_info(&a780_keypad_platform_data);
platform_add_devices(devices, ARRAY_SIZE(devices)); platform_add_devices(ARRAY_AND_SIZE(ezx_devices));
platform_add_devices(ARRAY_AND_SIZE(a780_devices));
} }
MACHINE_START(EZX_A780, "Motorola EZX A780") MACHINE_START(EZX_A780, "Motorola EZX A780")
...@@ -678,10 +715,39 @@ MACHINE_END ...@@ -678,10 +715,39 @@ MACHINE_END
#endif #endif
#ifdef CONFIG_MACH_EZX_E680 #ifdef CONFIG_MACH_EZX_E680
/* gpio_keys */
static struct gpio_keys_button e680_buttons[] = {
[0] = {
.code = KEY_SCREENLOCK,
.gpio = GPIO12_E680_LOCK_SWITCH,
.active_low = 0,
.desc = "E680 lock switch",
.type = EV_KEY,
.wakeup = 1,
},
};
static struct gpio_keys_platform_data e680_gpio_keys_platform_data = {
.buttons = e680_buttons,
.nbuttons = ARRAY_SIZE(e680_buttons),
};
static struct platform_device e680_gpio_keys = {
.name = "gpio-keys",
.id = -1,
.dev = {
.platform_data = &e680_gpio_keys_platform_data,
},
};
static struct i2c_board_info __initdata e680_i2c_board_info[] = { static struct i2c_board_info __initdata e680_i2c_board_info[] = {
{ I2C_BOARD_INFO("tea5767", 0x81) }, { I2C_BOARD_INFO("tea5767", 0x81) },
}; };
static struct platform_device *e680_devices[] __initdata = {
&e680_gpio_keys,
};
static void __init e680_init(void) static void __init e680_init(void)
{ {
pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config));
...@@ -695,7 +761,8 @@ static void __init e680_init(void) ...@@ -695,7 +761,8 @@ static void __init e680_init(void)
pxa_set_keypad_info(&e680_keypad_platform_data); pxa_set_keypad_info(&e680_keypad_platform_data);
platform_add_devices(devices, ARRAY_SIZE(devices)); platform_add_devices(ARRAY_AND_SIZE(ezx_devices));
platform_add_devices(ARRAY_AND_SIZE(e680_devices));
} }
MACHINE_START(EZX_E680, "Motorola EZX E680") MACHINE_START(EZX_E680, "Motorola EZX E680")
...@@ -710,10 +777,39 @@ MACHINE_END ...@@ -710,10 +777,39 @@ MACHINE_END
#endif #endif
#ifdef CONFIG_MACH_EZX_A1200 #ifdef CONFIG_MACH_EZX_A1200
/* gpio_keys */
static struct gpio_keys_button a1200_buttons[] = {
[0] = {
.code = SW_LID,
.gpio = GPIO15_A1200_FLIP_LID,
.active_low = 0,
.desc = "A1200 flip lid",
.type = EV_SW,
.wakeup = 1,
},
};
static struct gpio_keys_platform_data a1200_gpio_keys_platform_data = {
.buttons = a1200_buttons,
.nbuttons = ARRAY_SIZE(a1200_buttons),
};
static struct platform_device a1200_gpio_keys = {
.name = "gpio-keys",
.id = -1,
.dev = {
.platform_data = &a1200_gpio_keys_platform_data,
},
};
static struct i2c_board_info __initdata a1200_i2c_board_info[] = { static struct i2c_board_info __initdata a1200_i2c_board_info[] = {
{ I2C_BOARD_INFO("tea5767", 0x81) }, { I2C_BOARD_INFO("tea5767", 0x81) },
}; };
static struct platform_device *a1200_devices[] __initdata = {
&a1200_gpio_keys,
};
static void __init a1200_init(void) static void __init a1200_init(void)
{ {
pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config));
...@@ -727,7 +823,8 @@ static void __init a1200_init(void) ...@@ -727,7 +823,8 @@ static void __init a1200_init(void)
pxa_set_keypad_info(&a1200_keypad_platform_data); pxa_set_keypad_info(&a1200_keypad_platform_data);
platform_add_devices(devices, ARRAY_SIZE(devices)); platform_add_devices(ARRAY_AND_SIZE(ezx_devices));
platform_add_devices(ARRAY_AND_SIZE(a1200_devices));
} }
MACHINE_START(EZX_A1200, "Motorola EZX A1200") MACHINE_START(EZX_A1200, "Motorola EZX A1200")
...@@ -742,6 +839,35 @@ MACHINE_END ...@@ -742,6 +839,35 @@ MACHINE_END
#endif #endif
#ifdef CONFIG_MACH_EZX_A910 #ifdef CONFIG_MACH_EZX_A910
/* gpio_keys */
static struct gpio_keys_button a910_buttons[] = {
[0] = {
.code = SW_LID,
.gpio = GPIO15_A910_FLIP_LID,
.active_low = 0,
.desc = "A910 flip lid",
.type = EV_SW,
.wakeup = 1,
},
};
static struct gpio_keys_platform_data a910_gpio_keys_platform_data = {
.buttons = a910_buttons,
.nbuttons = ARRAY_SIZE(a910_buttons),
};
static struct platform_device a910_gpio_keys = {
.name = "gpio-keys",
.id = -1,
.dev = {
.platform_data = &a910_gpio_keys_platform_data,
},
};
static struct platform_device *a910_devices[] __initdata = {
&a910_gpio_keys,
};
static void __init a910_init(void) static void __init a910_init(void)
{ {
pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config));
...@@ -754,7 +880,8 @@ static void __init a910_init(void) ...@@ -754,7 +880,8 @@ static void __init a910_init(void)
pxa_set_keypad_info(&a910_keypad_platform_data); pxa_set_keypad_info(&a910_keypad_platform_data);
platform_add_devices(devices, ARRAY_SIZE(devices)); platform_add_devices(ARRAY_AND_SIZE(ezx_devices));
platform_add_devices(ARRAY_AND_SIZE(a910_devices));
} }
MACHINE_START(EZX_A910, "Motorola EZX A910") MACHINE_START(EZX_A910, "Motorola EZX A910")
...@@ -769,10 +896,39 @@ MACHINE_END ...@@ -769,10 +896,39 @@ MACHINE_END
#endif #endif
#ifdef CONFIG_MACH_EZX_E6 #ifdef CONFIG_MACH_EZX_E6
/* gpio_keys */
static struct gpio_keys_button e6_buttons[] = {
[0] = {
.code = KEY_SCREENLOCK,
.gpio = GPIO15_E6_LOCK_SWITCH,
.active_low = 0,
.desc = "E6 lock switch",
.type = EV_KEY,
.wakeup = 1,
},
};
static struct gpio_keys_platform_data e6_gpio_keys_platform_data = {
.buttons = e6_buttons,
.nbuttons = ARRAY_SIZE(e6_buttons),
};
static struct platform_device e6_gpio_keys = {
.name = "gpio-keys",
.id = -1,
.dev = {
.platform_data = &e6_gpio_keys_platform_data,
},
};
static struct i2c_board_info __initdata e6_i2c_board_info[] = { static struct i2c_board_info __initdata e6_i2c_board_info[] = {
{ I2C_BOARD_INFO("tea5767", 0x81) }, { I2C_BOARD_INFO("tea5767", 0x81) },
}; };
static struct platform_device *e6_devices[] __initdata = {
&e6_gpio_keys,
};
static void __init e6_init(void) static void __init e6_init(void)
{ {
pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config));
...@@ -786,7 +942,8 @@ static void __init e6_init(void) ...@@ -786,7 +942,8 @@ static void __init e6_init(void)
pxa_set_keypad_info(&e6_keypad_platform_data); pxa_set_keypad_info(&e6_keypad_platform_data);
platform_add_devices(devices, ARRAY_SIZE(devices)); platform_add_devices(ARRAY_AND_SIZE(ezx_devices));
platform_add_devices(ARRAY_AND_SIZE(e6_devices));
} }
MACHINE_START(EZX_E6, "Motorola EZX E6") MACHINE_START(EZX_E6, "Motorola EZX E6")
...@@ -805,6 +962,9 @@ static struct i2c_board_info __initdata e2_i2c_board_info[] = { ...@@ -805,6 +962,9 @@ static struct i2c_board_info __initdata e2_i2c_board_info[] = {
{ I2C_BOARD_INFO("tea5767", 0x81) }, { I2C_BOARD_INFO("tea5767", 0x81) },
}; };
static struct platform_device *e2_devices[] __initdata = {
};
static void __init e2_init(void) static void __init e2_init(void)
{ {
pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config));
...@@ -818,7 +978,8 @@ static void __init e2_init(void) ...@@ -818,7 +978,8 @@ static void __init e2_init(void)
pxa_set_keypad_info(&e2_keypad_platform_data); pxa_set_keypad_info(&e2_keypad_platform_data);
platform_add_devices(devices, ARRAY_SIZE(devices)); platform_add_devices(ARRAY_AND_SIZE(ezx_devices));
platform_add_devices(ARRAY_AND_SIZE(e2_devices));
} }
MACHINE_START(EZX_E2, "Motorola EZX E2") MACHINE_START(EZX_E2, "Motorola EZX E2")
......
This diff is collapsed.
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include <linux/spi/spi.h> #include <linux/spi/spi.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/mfd/da903x.h> #include <linux/mfd/da903x.h>
#include <linux/sht15.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
...@@ -29,7 +30,7 @@ ...@@ -29,7 +30,7 @@
#include <asm/mach/flash.h> #include <asm/mach/flash.h>
#include <mach/pxa27x.h> #include <mach/pxa27x.h>
#include <mach/i2c.h> #include <plat/i2c.h>
#include <mach/udc.h> #include <mach/udc.h>
#include <mach/mmc.h> #include <mach/mmc.h>
#include <mach/pxa2xx_spi.h> #include <mach/pxa2xx_spi.h>
...@@ -102,6 +103,10 @@ static unsigned long imote2_pin_config[] __initdata = { ...@@ -102,6 +103,10 @@ static unsigned long imote2_pin_config[] __initdata = {
GPIO96_GPIO, /* accelerometer interrupt */ GPIO96_GPIO, /* accelerometer interrupt */
GPIO99_GPIO, /* ADC interrupt */ GPIO99_GPIO, /* ADC interrupt */
/* SHT15 */
GPIO100_GPIO,
GPIO98_GPIO,
/* Connector pins specified as gpios */ /* Connector pins specified as gpios */
GPIO94_GPIO, /* large basic connector pin 14 */ GPIO94_GPIO, /* large basic connector pin 14 */
GPIO10_GPIO, /* large basic connector pin 23 */ GPIO10_GPIO, /* large basic connector pin 23 */
...@@ -112,6 +117,26 @@ static unsigned long imote2_pin_config[] __initdata = { ...@@ -112,6 +117,26 @@ static unsigned long imote2_pin_config[] __initdata = {
GPIO105_GPIO, /* blue led */ GPIO105_GPIO, /* blue led */
}; };
static struct sht15_platform_data platform_data_sht15 = {
.gpio_data = 100,
.gpio_sck = 98,
};
static struct platform_device sht15 = {
.name = "sht15",
.id = -1,
.dev = {
.platform_data = &platform_data_sht15,
},
};
static struct regulator_consumer_supply imote2_sensor_3_con[] = {
{
.dev = &sht15.dev,
.supply = "vcc",
},
};
static struct gpio_led imote2_led_pins[] = { static struct gpio_led imote2_led_pins[] = {
{ {
.name = "imote2:red", .name = "imote2:red",
...@@ -257,6 +282,8 @@ static struct regulator_init_data imote2_ldo_init_data[] = { ...@@ -257,6 +282,8 @@ static struct regulator_init_data imote2_ldo_init_data[] = {
.min_uV = 2800000, .min_uV = 2800000,
.max_uV = 3000000, .max_uV = 3000000,
}, },
.num_consumer_supplies = ARRAY_SIZE(imote2_sensor_3_con),
.consumer_supplies = imote2_sensor_3_con,
}, },
[vcc_pxa_pll] = { /* 1.17V - 1.43V, default 1.3V*/ [vcc_pxa_pll] = { /* 1.17V - 1.43V, default 1.3V*/
.constraints = { .constraints = {
...@@ -432,6 +459,9 @@ static struct i2c_board_info __initdata imote2_i2c_board_info[] = { ...@@ -432,6 +459,9 @@ static struct i2c_board_info __initdata imote2_i2c_board_info[] = {
.type = "tmp175", .type = "tmp175",
.addr = 0x4A, .addr = 0x4A,
.irq = IRQ_GPIO(96), .irq = IRQ_GPIO(96),
}, { /* IMB400 Multimedia board */
.type = "wm8940",
.addr = 0x1A,
}, },
}; };
...@@ -456,25 +486,12 @@ static struct pxa2xx_spi_master pxa_ssp_master_2_info = { ...@@ -456,25 +486,12 @@ static struct pxa2xx_spi_master pxa_ssp_master_2_info = {
.num_chipselect = 1, .num_chipselect = 1,
}; };
/* Patch posted by Eric Miao <eric.miao@marvell.com> will remove
* the need for these functions.
*/
static void spi1control(u32 command)
{
gpio_set_value(24, command & PXA2XX_CS_ASSERT ? 0 : 1);
};
static void spi3control(u32 command)
{
gpio_set_value(39, command & PXA2XX_CS_ASSERT ? 0 : 1);
};
static struct pxa2xx_spi_chip staccel_chip_info = { static struct pxa2xx_spi_chip staccel_chip_info = {
.tx_threshold = 8, .tx_threshold = 8,
.rx_threshold = 8, .rx_threshold = 8,
.dma_burst_size = 8, .dma_burst_size = 8,
.timeout = 235, .timeout = 235,
.cs_control = spi1control, .gpio_cs = 24,
}; };
static struct pxa2xx_spi_chip cc2420_info = { static struct pxa2xx_spi_chip cc2420_info = {
...@@ -482,7 +499,7 @@ static struct pxa2xx_spi_chip cc2420_info = { ...@@ -482,7 +499,7 @@ static struct pxa2xx_spi_chip cc2420_info = {
.rx_threshold = 8, .rx_threshold = 8,
.dma_burst_size = 8, .dma_burst_size = 8,
.timeout = 235, .timeout = 235,
.cs_control = spi3control, .gpio_cs = 39,
}; };
static struct spi_board_info spi_board_info[] __initdata = { static struct spi_board_info spi_board_info[] __initdata = {
...@@ -521,6 +538,7 @@ static struct pxa2xx_udc_mach_info imote2_udc_info __initdata = { ...@@ -521,6 +538,7 @@ static struct pxa2xx_udc_mach_info imote2_udc_info __initdata = {
static struct platform_device *imote2_devices[] = { static struct platform_device *imote2_devices[] = {
&imote2_flash_device, &imote2_flash_device,
&imote2_leds, &imote2_leds,
&sht15,
}; };
static struct i2c_pxa_platform_data i2c_pwr_pdata = { static struct i2c_pxa_platform_data i2c_pwr_pdata = {
...@@ -538,8 +556,6 @@ static void __init imote2_init(void) ...@@ -538,8 +556,6 @@ static void __init imote2_init(void)
/* SPI chip select directions - all other directions should /* SPI chip select directions - all other directions should
* be handled by drivers.*/ * be handled by drivers.*/
gpio_direction_output(37, 0); gpio_direction_output(37, 0);
gpio_direction_output(24, 0);
gpio_direction_output(39, 0);
platform_add_devices(imote2_devices, ARRAY_SIZE(imote2_devices)); platform_add_devices(imote2_devices, ARRAY_SIZE(imote2_devices));
......
/*
* GPIO and IRQ definitions for HP iPAQ hx4700
*
* Copyright (c) 2008 Philipp Zabel
*
* 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.
*
*/
#ifndef _HX4700_H_
#define _HX4700_H_
#include <linux/gpio.h>
#include <linux/mfd/asic3.h>
#define HX4700_ASIC3_GPIO_BASE NR_BUILTIN_GPIO
#define HX4700_EGPIO_BASE (HX4700_ASIC3_GPIO_BASE + ASIC3_NUM_GPIOS)
/*
* PXA GPIOs
*/
#define GPIO0_HX4700_nKEY_POWER 0
#define GPIO12_HX4700_ASIC3_IRQ 12
#define GPIO13_HX4700_W3220_IRQ 13
#define GPIO14_HX4700_nWLAN_IRQ 14
#define GPIO18_HX4700_RDY 18
#define GPIO22_HX4700_LCD_RL 22
#define GPIO27_HX4700_CODEC_ON 27
#define GPIO32_HX4700_RS232_ON 32
#define GPIO52_HX4700_CPU_nBATT_FAULT 52
#define GPIO58_HX4700_TSC2046_nPENIRQ 58
#define GPIO59_HX4700_LCD_PC1 59
#define GPIO60_HX4700_CF_RNB 60
#define GPIO61_HX4700_W3220_nRESET 61
#define GPIO62_HX4700_LCD_nRESET 62
#define GPIO63_HX4700_CPU_SS_nRESET 63
#define GPIO65_HX4700_TSC2046_PEN_PU 65
#define GPIO66_HX4700_ASIC3_nSDIO_IRQ 66
#define GPIO67_HX4700_EUART_PS 67
#define GPIO70_HX4700_LCD_SLIN1 70
#define GPIO71_HX4700_ASIC3_nRESET 71
#define GPIO72_HX4700_BQ24022_nCHARGE_EN 72
#define GPIO73_HX4700_LCD_UD_1 73
#define GPIO75_HX4700_EARPHONE_nDET 75
#define GPIO76_HX4700_USBC_PUEN 76
#define GPIO81_HX4700_CPU_GP_nRESET 81
#define GPIO82_HX4700_EUART_RESET 82
#define GPIO83_HX4700_WLAN_nRESET 83
#define GPIO84_HX4700_LCD_SQN 84
#define GPIO85_HX4700_nPCE1 85
#define GPIO88_HX4700_TSC2046_CS 88
#define GPIO91_HX4700_FLASH_VPEN 91
#define GPIO92_HX4700_HP_DRIVER 92
#define GPIO93_HX4700_EUART_INT 93
#define GPIO94_HX4700_KEY_MAIL 94
#define GPIO95_HX4700_BATT_OFF 95
#define GPIO96_HX4700_BQ24022_ISET2 96
#define GPIO97_HX4700_nBL_DETECT 97
#define GPIO99_HX4700_KEY_CONTACTS 99
#define GPIO100_HX4700_AUTO_SENSE 100 /* BL auto brightness */
#define GPIO102_HX4700_SYNAPTICS_POWER_ON 102
#define GPIO103_HX4700_SYNAPTICS_INT 103
#define GPIO105_HX4700_nIR_ON 105
#define GPIO106_HX4700_CPU_BT_nRESET 106
#define GPIO107_HX4700_SPK_nSD 107
#define GPIO109_HX4700_CODEC_nPDN 109
#define GPIO110_HX4700_LCD_LVDD_3V3_ON 110
#define GPIO111_HX4700_LCD_AVDD_3V3_ON 111
#define GPIO112_HX4700_LCD_N2V7_7V3_ON 112
#define GPIO114_HX4700_CF_RESET 114
#define GPIO116_HX4700_CPU_HW_nRESET 116
/*
* ASIC3 GPIOs
*/
#define GPIOC_BASE (HX4700_ASIC3_GPIO_BASE + 32)
#define GPIOD_BASE (HX4700_ASIC3_GPIO_BASE + 48)
#define GPIOC0_LED_RED (GPIOC_BASE + 0)
#define GPIOC1_LED_GREEN (GPIOC_BASE + 1)
#define GPIOC2_LED_BLUE (GPIOC_BASE + 2)
#define GPIOC3_nSD_CS (GPIOC_BASE + 3)
#define GPIOC4_CF_nCD (GPIOC_BASE + 4) /* Input */
#define GPIOC5_nCIOW (GPIOC_BASE + 5) /* Output, to CF */
#define GPIOC6_nCIOR (GPIOC_BASE + 6) /* Output, to CF */
#define GPIOC7_nPCE1 (GPIOC_BASE + 7) /* Input, from CPU */
#define GPIOC8_nPCE2 (GPIOC_BASE + 8) /* Input, from CPU */
#define GPIOC9_nPOE (GPIOC_BASE + 9) /* Input, from CPU */
#define GPIOC10_CF_nPWE (GPIOC_BASE + 10) /* Input */
#define GPIOC11_PSKTSEL (GPIOC_BASE + 11) /* Input, from CPU */
#define GPIOC12_nPREG (GPIOC_BASE + 12) /* Input, from CPU */
#define GPIOC13_nPWAIT (GPIOC_BASE + 13) /* Output, to CPU */
#define GPIOC14_nPIOIS16 (GPIOC_BASE + 14) /* Output, to CPU */
#define GPIOC15_nPIOR (GPIOC_BASE + 15) /* Input, from CPU */
#define GPIOD0_CPU_SS_INT (GPIOD_BASE + 0) /* Input */
#define GPIOD1_nKEY_CALENDAR (GPIOD_BASE + 1)
#define GPIOD2_BLUETOOTH_WAKEUP (GPIOD_BASE + 2)
#define GPIOD3_nKEY_HOME (GPIOD_BASE + 3)
#define GPIOD4_CF_nCD (GPIOD_BASE + 4) /* Input, from CF */
#define GPIOD5_nPIO (GPIOD_BASE + 5) /* Input */
#define GPIOD6_nKEY_RECORD (GPIOD_BASE + 6)
#define GPIOD7_nSDIO_DETECT (GPIOD_BASE + 7)
#define GPIOD8_COM_DCD (GPIOD_BASE + 8) /* Input */
#define GPIOD9_nAC_IN (GPIOD_BASE + 9)
#define GPIOD10_nSDIO_IRQ (GPIOD_BASE + 10) /* Input */
#define GPIOD11_nCIOIS16 (GPIOD_BASE + 11) /* Input, from CF */
#define GPIOD12_nCWAIT (GPIOD_BASE + 12) /* Input, from CF */
#define GPIOD13_CF_RNB (GPIOD_BASE + 13) /* Input */
#define GPIOD14_nUSBC_DETECT (GPIOD_BASE + 14)
#define GPIOD15_nPIOW (GPIOD_BASE + 15) /* Input, from CPU */
/*
* EGPIOs
*/
#define EGPIO0_VCC_3V3_EN (HX4700_EGPIO_BASE + 0) /* WLAN support chip */
#define EGPIO1_WL_VREG_EN (HX4700_EGPIO_BASE + 1) /* WLAN power */
#define EGPIO2_VCC_2V1_WL_EN (HX4700_EGPIO_BASE + 2) /* unused */
#define EGPIO3_SS_PWR_ON (HX4700_EGPIO_BASE + 3) /* smart slot power */
#define EGPIO4_CF_3V3_ON (HX4700_EGPIO_BASE + 4) /* CF 3.3V enable */
#define EGPIO5_BT_3V3_ON (HX4700_EGPIO_BASE + 5) /* BT 3.3V enable */
#define EGPIO6_WL1V8_EN (HX4700_EGPIO_BASE + 6) /* WLAN 1.8V enable */
#define EGPIO7_VCC_3V3_WL_EN (HX4700_EGPIO_BASE + 7) /* WLAN 3.3V enable */
#define EGPIO8_USB_3V3_ON (HX4700_EGPIO_BASE + 8) /* unused */
#endif /* _HX4700_H_ */
...@@ -91,13 +91,23 @@ ...@@ -91,13 +91,23 @@
#define IRQ_TO_GPIO(i) (((i) < IRQ_GPIO(2)) ? ((i) - IRQ_GPIO0) : IRQ_TO_GPIO_2_x(i)) #define IRQ_TO_GPIO(i) (((i) < IRQ_GPIO(2)) ? ((i) - IRQ_GPIO0) : IRQ_TO_GPIO_2_x(i))
/* /*
* The next 16 interrupts are for board specific purposes. Since * The following interrupts are for board specific purposes. Since
* the kernel can only run on one machine at a time, we can re-use * the kernel can only run on one machine at a time, we can re-use
* these. If you need more, increase IRQ_BOARD_END, but keep it * these. There will be 16 IRQs by default. If it is not enough,
* within sensible limits. * IRQ_BOARD_END is allowed be customized for each board, but keep
* the numbers within sensible limits and in descending order, so
* when multiple config options are selected, the maximum will be
* used.
*/ */
#define IRQ_BOARD_START (PXA_GPIO_IRQ_BASE + PXA_GPIO_IRQ_NUM) #define IRQ_BOARD_START (PXA_GPIO_IRQ_BASE + PXA_GPIO_IRQ_NUM)
#if defined(CONFIG_MACH_H4700)
#define IRQ_BOARD_END (IRQ_BOARD_START + 70)
#elif defined(CONFIG_MACH_ZYLONITE)
#define IRQ_BOARD_END (IRQ_BOARD_START + 32)
#else
#define IRQ_BOARD_END (IRQ_BOARD_START + 16) #define IRQ_BOARD_END (IRQ_BOARD_START + 16)
#endif
#define IRQ_SA1111_START (IRQ_BOARD_END) #define IRQ_SA1111_START (IRQ_BOARD_END)
#define IRQ_GPAIN0 (IRQ_BOARD_END + 0) #define IRQ_GPAIN0 (IRQ_BOARD_END + 0)
...@@ -188,8 +198,6 @@ ...@@ -188,8 +198,6 @@
#define NR_IRQS (IRQ_LOCOMO_SPI_TEND + 1) #define NR_IRQS (IRQ_LOCOMO_SPI_TEND + 1)
#elif defined(CONFIG_PXA_HAVE_BOARD_IRQS) #elif defined(CONFIG_PXA_HAVE_BOARD_IRQS)
#define NR_IRQS (IRQ_BOARD_END) #define NR_IRQS (IRQ_BOARD_END)
#elif defined(CONFIG_MACH_ZYLONITE)
#define NR_IRQS (IRQ_BOARD_START + 32)
#else #else
#define NR_IRQS (IRQ_BOARD_START) #define NR_IRQS (IRQ_BOARD_START)
#endif #endif
......
...@@ -283,6 +283,9 @@ ...@@ -283,6 +283,9 @@
#define GPIO41_UART1_TXD MFP_CFG_LPM(GPIO41, AF4, FLOAT) #define GPIO41_UART1_TXD MFP_CFG_LPM(GPIO41, AF4, FLOAT)
#define GPIO42_UART1_RXD MFP_CFG_LPM(GPIO42, AF4, FLOAT) #define GPIO42_UART1_RXD MFP_CFG_LPM(GPIO42, AF4, FLOAT)
#define GPIO42_UART1_TXD MFP_CFG_LPM(GPIO42, AF2, FLOAT) #define GPIO42_UART1_TXD MFP_CFG_LPM(GPIO42, AF2, FLOAT)
#define GPIO75_UART1_RXD MFP_CFG_LPM(GPIO75, AF1, FLOAT)
#define GPIO76_UART1_RXD MFP_CFG_LPM(GPIO76, AF3, FLOAT)
#define GPIO76_UART1_TXD MFP_CFG_LPM(GPIO76, AF1, FLOAT)
#define GPIO97_UART1_RXD MFP_CFG_LPM(GPIO97, AF1, FLOAT) #define GPIO97_UART1_RXD MFP_CFG_LPM(GPIO97, AF1, FLOAT)
#define GPIO97_UART1_TXD MFP_CFG_LPM(GPIO97, AF6, FLOAT) #define GPIO97_UART1_TXD MFP_CFG_LPM(GPIO97, AF6, FLOAT)
#define GPIO98_UART1_RXD MFP_CFG_LPM(GPIO98, AF6, FLOAT) #define GPIO98_UART1_RXD MFP_CFG_LPM(GPIO98, AF6, FLOAT)
...@@ -291,6 +294,9 @@ ...@@ -291,6 +294,9 @@
#define GPIO43_UART1_RTS MFP_CFG_LPM(GPIO43, AF4, FLOAT) #define GPIO43_UART1_RTS MFP_CFG_LPM(GPIO43, AF4, FLOAT)
#define GPIO48_UART1_CTS MFP_CFG_LPM(GPIO48, AF4, FLOAT) #define GPIO48_UART1_CTS MFP_CFG_LPM(GPIO48, AF4, FLOAT)
#define GPIO48_UART1_RTS MFP_CFG_LPM(GPIO48, AF2, FLOAT) #define GPIO48_UART1_RTS MFP_CFG_LPM(GPIO48, AF2, FLOAT)
#define GPIO77_UART1_CTS MFP_CFG_LPM(GPIO77, AF1, FLOAT)
#define GPIO82_UART1_RTS MFP_CFG_LPM(GPIO82, AF1, FLOAT)
#define GPIO82_UART1_CTS MFP_CFG_LPM(GPIO82, AF3, FLOAT)
#define GPIO99_UART1_CTS MFP_CFG_LPM(GPIO99, AF1, FLOAT) #define GPIO99_UART1_CTS MFP_CFG_LPM(GPIO99, AF1, FLOAT)
#define GPIO99_UART1_RTS MFP_CFG_LPM(GPIO99, AF6, FLOAT) #define GPIO99_UART1_RTS MFP_CFG_LPM(GPIO99, AF6, FLOAT)
#define GPIO104_UART1_CTS MFP_CFG_LPM(GPIO104, AF6, FLOAT) #define GPIO104_UART1_CTS MFP_CFG_LPM(GPIO104, AF6, FLOAT)
...@@ -299,13 +305,18 @@ ...@@ -299,13 +305,18 @@
#define GPIO45_UART1_DSR MFP_CFG_LPM(GPIO45, AF2, FLOAT) #define GPIO45_UART1_DSR MFP_CFG_LPM(GPIO45, AF2, FLOAT)
#define GPIO47_UART1_DTR MFP_CFG_LPM(GPIO47, AF2, FLOAT) #define GPIO47_UART1_DTR MFP_CFG_LPM(GPIO47, AF2, FLOAT)
#define GPIO47_UART1_DSR MFP_CFG_LPM(GPIO47, AF4, FLOAT) #define GPIO47_UART1_DSR MFP_CFG_LPM(GPIO47, AF4, FLOAT)
#define GPIO79_UART1_DSR MFP_CFG_LPM(GPIO79, AF1, FLOAT)
#define GPIO81_UART1_DTR MFP_CFG_LPM(GPIO81, AF1, FLOAT)
#define GPIO81_UART1_DSR MFP_CFG_LPM(GPIO81, AF3, FLOAT)
#define GPIO101_UART1_DTR MFP_CFG_LPM(GPIO101, AF6, FLOAT) #define GPIO101_UART1_DTR MFP_CFG_LPM(GPIO101, AF6, FLOAT)
#define GPIO101_UART1_DSR MFP_CFG_LPM(GPIO101, AF1, FLOAT) #define GPIO101_UART1_DSR MFP_CFG_LPM(GPIO101, AF1, FLOAT)
#define GPIO103_UART1_DTR MFP_CFG_LPM(GPIO103, AF1, FLOAT) #define GPIO103_UART1_DTR MFP_CFG_LPM(GPIO103, AF1, FLOAT)
#define GPIO103_UART1_DSR MFP_CFG_LPM(GPIO103, AF6, FLOAT) #define GPIO103_UART1_DSR MFP_CFG_LPM(GPIO103, AF6, FLOAT)
#define GPIO44_UART1_DCD MFP_CFG_LPM(GPIO44, AF2, FLOAT) #define GPIO44_UART1_DCD MFP_CFG_LPM(GPIO44, AF2, FLOAT)
#define GPIO78_UART1_DCD MFP_CFG_LPM(GPIO78, AF1, FLOAT)
#define GPIO100_UART1_DCD MFP_CFG_LPM(GPIO100, AF1, FLOAT) #define GPIO100_UART1_DCD MFP_CFG_LPM(GPIO100, AF1, FLOAT)
#define GPIO46_UART1_RI MFP_CFG_LPM(GPIO46, AF2, FLOAT) #define GPIO46_UART1_RI MFP_CFG_LPM(GPIO46, AF2, FLOAT)
#define GPIO80_UART1_RI MFP_CFG_LPM(GPIO80, AF1, FLOAT)
#define GPIO102_UART1_RI MFP_CFG_LPM(GPIO102, AF1, FLOAT) #define GPIO102_UART1_RI MFP_CFG_LPM(GPIO102, AF1, FLOAT)
/* UART2 */ /* UART2 */
...@@ -438,6 +449,9 @@ ...@@ -438,6 +449,9 @@
#define GPIO2_RDY MFP_CFG(GPIO2, AF1) #define GPIO2_RDY MFP_CFG(GPIO2, AF1)
#define GPIO5_NPIOR MFP_CFG(GPIO5, AF3) #define GPIO5_NPIOR MFP_CFG(GPIO5, AF3)
#define GPIO6_NPIOW MFP_CFG(GPIO6, AF3)
#define GPIO7_NPIOS16 MFP_CFG(GPIO7, AF3)
#define GPIO8_NPWAIT MFP_CFG(GPIO8, AF3)
#define GPIO11_PWM0_OUT MFP_CFG(GPIO11, AF1) #define GPIO11_PWM0_OUT MFP_CFG(GPIO11, AF1)
#define GPIO12_PWM1_OUT MFP_CFG(GPIO12, AF1) #define GPIO12_PWM1_OUT MFP_CFG(GPIO12, AF1)
......
...@@ -27,6 +27,8 @@ extern void pxa27x_cpu_suspend(unsigned int); ...@@ -27,6 +27,8 @@ extern void pxa27x_cpu_suspend(unsigned int);
extern void pxa_cpu_resume(void); extern void pxa_cpu_resume(void);
extern int pxa_pm_enter(suspend_state_t state); extern int pxa_pm_enter(suspend_state_t state);
extern int pxa_pm_prepare(void);
extern void pxa_pm_finish(void);
/* NOTE: this is for PM debugging on Lubbock, it's really a big /* NOTE: this is for PM debugging on Lubbock, it's really a big
* ugly, but let's keep the crap minimum here, instead of direct * ugly, but let's keep the crap minimum here, instead of direct
......
...@@ -16,4 +16,7 @@ ...@@ -16,4 +16,7 @@
#define ARB_DMA_PARK (1<<25) /* Be parked with DMA when idle */ #define ARB_DMA_PARK (1<<25) /* Be parked with DMA when idle */
#define ARB_CORE_PARK (1<<24) /* Be parked with core when idle */ #define ARB_CORE_PARK (1<<24) /* Be parked with core when idle */
#define ARB_LOCK_FLAG (1<<23) /* Only Locking masters gain access to the bus */ #define ARB_LOCK_FLAG (1<<23) /* Only Locking masters gain access to the bus */
extern int __init pxa27x_set_pwrmode(unsigned int mode);
#endif /* __MACH_PXA27x_H */ #endif /* __MACH_PXA27x_H */
...@@ -8,8 +8,8 @@ ...@@ -8,8 +8,8 @@
* published by the Free Software Foundation. * published by the Free Software Foundation.
* *
*/ */
#ifndef _MACH_SHARPSL_PM
#include <linux/interrupt.h> #define _MACH_SHARPSL_PM
struct sharpsl_charger_machinfo { struct sharpsl_charger_machinfo {
void (*init)(void); void (*init)(void);
...@@ -100,7 +100,5 @@ extern struct sharpsl_pm_status sharpsl_pm; ...@@ -100,7 +100,5 @@ extern struct sharpsl_pm_status sharpsl_pm;
void sharpsl_battery_kick(void); void sharpsl_battery_kick(void);
void sharpsl_pm_led(int val); void sharpsl_pm_led(int val);
irqreturn_t sharpsl_ac_isr(int irq, void *dev_id);
irqreturn_t sharpsl_chrg_full_isr(int irq, void *dev_id);
irqreturn_t sharpsl_fatal_isr(int irq, void *dev_id);
#endif
...@@ -36,7 +36,8 @@ static inline void flush(void) ...@@ -36,7 +36,8 @@ static inline void flush(void)
static inline void arch_decomp_setup(void) static inline void arch_decomp_setup(void)
{ {
if (machine_is_littleton() || machine_is_intelmote2() if (machine_is_littleton() || machine_is_intelmote2()
|| machine_is_csb726()) || machine_is_csb726() || machine_is_stargate2()
|| machine_is_cm_x300())
UART = STUART; UART = STUART;
} }
......
...@@ -42,14 +42,17 @@ ...@@ -42,14 +42,17 @@
#include <mach/pxa300.h> #include <mach/pxa300.h>
#include <mach/pxafb.h> #include <mach/pxafb.h>
#include <mach/ssp.h> #include <mach/ssp.h>
#include <mach/mmc.h>
#include <mach/pxa2xx_spi.h> #include <mach/pxa2xx_spi.h>
#include <mach/i2c.h> #include <plat/i2c.h>
#include <mach/pxa27x_keypad.h> #include <mach/pxa27x_keypad.h>
#include <mach/pxa3xx_nand.h> #include <mach/pxa3xx_nand.h>
#include <mach/littleton.h> #include <mach/littleton.h>
#include "generic.h" #include "generic.h"
#define GPIO_MMC1_CARD_DETECT mfp_to_gpio(MFP_PIN_GPIO15)
/* Littleton MFP configurations */ /* Littleton MFP configurations */
static mfp_cfg_t littleton_mfp_cfg[] __initdata = { static mfp_cfg_t littleton_mfp_cfg[] __initdata = {
/* LCD */ /* LCD */
...@@ -98,6 +101,15 @@ static mfp_cfg_t littleton_mfp_cfg[] __initdata = { ...@@ -98,6 +101,15 @@ static mfp_cfg_t littleton_mfp_cfg[] __initdata = {
GPIO123_KP_MKOUT_2, GPIO123_KP_MKOUT_2,
GPIO124_KP_MKOUT_3, GPIO124_KP_MKOUT_3,
GPIO125_KP_MKOUT_4, GPIO125_KP_MKOUT_4,
/* MMC1 */
GPIO3_MMC1_DAT0,
GPIO4_MMC1_DAT1,
GPIO5_MMC1_DAT2,
GPIO6_MMC1_DAT3,
GPIO7_MMC1_CLK,
GPIO8_MMC1_CMD,
GPIO15_GPIO, /* card detect */
}; };
static struct resource smc91x_resources[] = { static struct resource smc91x_resources[] = {
...@@ -179,15 +191,10 @@ static struct pxa2xx_spi_master littleton_spi_info = { ...@@ -179,15 +191,10 @@ static struct pxa2xx_spi_master littleton_spi_info = {
.num_chipselect = 1, .num_chipselect = 1,
}; };
static void littleton_tdo24m_cs(u32 cmd)
{
gpio_set_value(LITTLETON_GPIO_LCD_CS, !(cmd == PXA2XX_CS_ASSERT));
}
static struct pxa2xx_spi_chip littleton_tdo24m_chip = { static struct pxa2xx_spi_chip littleton_tdo24m_chip = {
.rx_threshold = 1, .rx_threshold = 1,
.tx_threshold = 1, .tx_threshold = 1,
.cs_control = littleton_tdo24m_cs, .gpio_cs = LITTLETON_GPIO_LCD_CS,
}; };
static struct spi_board_info littleton_spi_devices[] __initdata = { static struct spi_board_info littleton_spi_devices[] __initdata = {
...@@ -202,16 +209,6 @@ static struct spi_board_info littleton_spi_devices[] __initdata = { ...@@ -202,16 +209,6 @@ static struct spi_board_info littleton_spi_devices[] __initdata = {
static void __init littleton_init_spi(void) static void __init littleton_init_spi(void)
{ {
int err;
err = gpio_request(LITTLETON_GPIO_LCD_CS, "LCD_CS");
if (err) {
pr_warning("failed to request GPIO for LCS CS\n");
return;
}
gpio_direction_output(LITTLETON_GPIO_LCD_CS, 1);
pxa2xx_set_spi_info(2, &littleton_spi_info); pxa2xx_set_spi_info(2, &littleton_spi_info);
spi_register_board_info(ARRAY_AND_SIZE(littleton_spi_devices)); spi_register_board_info(ARRAY_AND_SIZE(littleton_spi_devices));
} }
...@@ -267,6 +264,56 @@ static void __init littleton_init_keypad(void) ...@@ -267,6 +264,56 @@ static void __init littleton_init_keypad(void)
static inline void littleton_init_keypad(void) {} static inline void littleton_init_keypad(void) {}
#endif #endif
#if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE)
static int littleton_mci_init(struct device *dev,
irq_handler_t littleton_detect_int, void *data)
{
int err, gpio_cd = GPIO_MMC1_CARD_DETECT;
err = gpio_request(gpio_cd, "mmc card detect");
if (err)
goto err_request_cd;
gpio_direction_input(gpio_cd);
err = request_irq(gpio_to_irq(gpio_cd), littleton_detect_int,
IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
"mmc card detect", data);
if (err) {
dev_err(dev, "failed to request card detect IRQ\n");
goto err_request_irq;
}
return 0;
err_request_irq:
gpio_free(gpio_cd);
err_request_cd:
return err;
}
static void littleton_mci_exit(struct device *dev, void *data)
{
int gpio_cd = GPIO_MMC1_CARD_DETECT;
free_irq(gpio_to_irq(gpio_cd), data);
gpio_free(gpio_cd);
}
static struct pxamci_platform_data littleton_mci_platform_data = {
.detect_delay = 20,
.ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
.init = littleton_mci_init,
.exit = littleton_mci_exit,
};
static void __init littleton_init_mmc(void)
{
pxa_set_mci_info(&littleton_mci_platform_data);
}
#else
static inline void littleton_init_mmc(void) {}
#endif
#if defined(CONFIG_MTD_NAND_PXA3xx) || defined(CONFIG_MTD_NAND_PXA3xx_MODULE) #if defined(CONFIG_MTD_NAND_PXA3xx) || defined(CONFIG_MTD_NAND_PXA3xx_MODULE)
static struct mtd_partition littleton_nand_partitions[] = { static struct mtd_partition littleton_nand_partitions[] = {
[0] = { [0] = {
...@@ -407,6 +454,7 @@ static void __init littleton_init(void) ...@@ -407,6 +454,7 @@ static void __init littleton_init(void)
littleton_init_spi(); littleton_init_spi();
littleton_init_i2c(); littleton_init_i2c();
littleton_init_mmc();
littleton_init_lcd(); littleton_init_lcd();
littleton_init_keypad(); littleton_init_keypad();
littleton_init_nand(); littleton_init_nand();
......
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
#include <mach/pxa27x.h> #include <mach/pxa27x.h>
#include <mach/magician.h> #include <mach/magician.h>
#include <mach/pxafb.h> #include <mach/pxafb.h>
#include <mach/i2c.h> #include <plat/i2c.h>
#include <mach/mmc.h> #include <mach/mmc.h>
#include <mach/irda.h> #include <mach/irda.h>
#include <mach/ohci.h> #include <mach/ohci.h>
...@@ -744,6 +744,14 @@ static struct platform_device strataflash = { ...@@ -744,6 +744,14 @@ static struct platform_device strataflash = {
}, },
}; };
/*
* I2C
*/
static struct i2c_pxa_platform_data i2c_info = {
.fast_mode = 1,
};
/* /*
* Platform devices * Platform devices
*/ */
...@@ -771,7 +779,7 @@ static void __init magician_init(void) ...@@ -771,7 +779,7 @@ static void __init magician_init(void)
pxa2xx_mfp_config(ARRAY_AND_SIZE(magician_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(magician_pin_config));
platform_add_devices(devices, ARRAY_SIZE(devices)); platform_add_devices(ARRAY_AND_SIZE(devices));
err = gpio_request(GPIO83_MAGICIAN_nIR_EN, "nIR_EN"); err = gpio_request(GPIO83_MAGICIAN_nIR_EN, "nIR_EN");
if (!err) { if (!err) {
...@@ -779,7 +787,7 @@ static void __init magician_init(void) ...@@ -779,7 +787,7 @@ static void __init magician_init(void)
pxa_set_ficp_info(&magician_ficp_info); pxa_set_ficp_info(&magician_ficp_info);
} }
pxa27x_set_i2c_power_info(NULL); pxa27x_set_i2c_power_info(NULL);
pxa_set_i2c_info(NULL); pxa_set_i2c_info(&i2c_info);
pxa_set_mci_info(&magician_mci_info); pxa_set_mci_info(&magician_mci_info);
pxa_set_ohci_info(&magician_ohci_info); pxa_set_ohci_info(&magician_ohci_info);
......
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
#include <mach/mainstone.h> #include <mach/mainstone.h>
#include <mach/audio.h> #include <mach/audio.h>
#include <mach/pxafb.h> #include <mach/pxafb.h>
#include <mach/i2c.h> #include <plat/i2c.h>
#include <mach/mmc.h> #include <mach/mmc.h>
#include <mach/irda.h> #include <mach/irda.h>
#include <mach/ohci.h> #include <mach/ohci.h>
......
...@@ -48,7 +48,7 @@ ...@@ -48,7 +48,7 @@
#include <mach/mmc.h> #include <mach/mmc.h>
#include <mach/udc.h> #include <mach/udc.h>
#include <mach/pxa27x-udc.h> #include <mach/pxa27x-udc.h>
#include <mach/i2c.h> #include <plat/i2c.h>
#include <mach/camera.h> #include <mach/camera.h>
#include <mach/audio.h> #include <mach/audio.h>
#include <media/soc_camera.h> #include <media/soc_camera.h>
...@@ -798,7 +798,7 @@ static void mioa701_restart(char c, const char *cmd) ...@@ -798,7 +798,7 @@ static void mioa701_restart(char c, const char *cmd)
arm_machine_restart('s', cmd); arm_machine_restart('s', cmd);
} }
struct gpio_ress global_gpios[] = { static struct gpio_ress global_gpios[] = {
MIO_GPIO_OUT(GPIO9_CHARGE_EN, 1, "Charger enable"), MIO_GPIO_OUT(GPIO9_CHARGE_EN, 1, "Charger enable"),
MIO_GPIO_OUT(GPIO18_POWEROFF, 0, "Power Off"), MIO_GPIO_OUT(GPIO18_POWEROFF, 0, "Power Off"),
MIO_GPIO_OUT(GPIO87_LCD_POWER, 0, "LCD Power") MIO_GPIO_OUT(GPIO87_LCD_POWER, 0, "LCD Power")
......
...@@ -532,30 +532,18 @@ static struct pxafb_mach_info palmld_lcd_screen = { ...@@ -532,30 +532,18 @@ static struct pxafb_mach_info palmld_lcd_screen = {
/****************************************************************************** /******************************************************************************
* Power management - standby * Power management - standby
******************************************************************************/ ******************************************************************************/
#ifdef CONFIG_PM static void __init palmld_pm_init(void)
static u32 *addr __initdata;
static u32 resume[3] __initdata = {
0xe3a00101, /* mov r0, #0x40000000 */
0xe380060f, /* orr r0, r0, #0x00f00000 */
0xe590f008, /* ldr pc, [r0, #0x08] */
};
static int __init palmld_pm_init(void)
{ {
int i; static u32 resume[] = {
0xe3a00101, /* mov r0, #0x40000000 */
/* this is where the bootloader jumps */ 0xe380060f, /* orr r0, r0, #0x00f00000 */
addr = phys_to_virt(PALMLD_STR_BASE); 0xe590f008, /* ldr pc, [r0, #0x08] */
};
for (i = 0; i < 3; i++)
addr[i] = resume[i]; /* copy the bootloader */
memcpy(phys_to_virt(PALMLD_STR_BASE), resume, sizeof(resume));
return 0;
} }
device_initcall(palmld_pm_init);
#endif
/****************************************************************************** /******************************************************************************
* Machine init * Machine init
******************************************************************************/ ******************************************************************************/
...@@ -595,6 +583,7 @@ static void __init palmld_init(void) ...@@ -595,6 +583,7 @@ static void __init palmld_init(void)
{ {
pxa2xx_mfp_config(ARRAY_AND_SIZE(palmld_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(palmld_pin_config));
palmld_pm_init();
set_pxa_fb_info(&palmld_lcd_screen); set_pxa_fb_info(&palmld_lcd_screen);
pxa_set_mci_info(&palmld_mci_platform_data); pxa_set_mci_info(&palmld_mci_platform_data);
pxa_set_ac97_info(&palmld_ac97_pdata); pxa_set_ac97_info(&palmld_ac97_pdata);
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include <linux/gpio.h> #include <linux/gpio.h>
#include <linux/wm97xx_batt.h> #include <linux/wm97xx_batt.h>
#include <linux/power_supply.h> #include <linux/power_supply.h>
#include <linux/usb/gpio_vbus.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
...@@ -343,11 +344,18 @@ static struct pxaficp_platform_data palmt5_ficp_platform_data = { ...@@ -343,11 +344,18 @@ static struct pxaficp_platform_data palmt5_ficp_platform_data = {
/****************************************************************************** /******************************************************************************
* UDC * UDC
******************************************************************************/ ******************************************************************************/
static struct pxa2xx_udc_mach_info palmt5_udc_info __initdata = { static struct gpio_vbus_mach_info palmt5_udc_info = {
.gpio_vbus = GPIO_NR_PALMT5_USB_DETECT_N, .gpio_vbus = GPIO_NR_PALMT5_USB_DETECT_N,
.gpio_vbus_inverted = 1, .gpio_vbus_inverted = 1,
.gpio_pullup = GPIO_NR_PALMT5_USB_PULLUP, .gpio_pullup = GPIO_NR_PALMT5_USB_PULLUP,
.gpio_pullup_inverted = 0, };
static struct platform_device palmt5_gpio_vbus = {
.name = "gpio-vbus",
.id = -1,
.dev = {
.platform_data = &palmt5_udc_info,
},
}; };
/****************************************************************************** /******************************************************************************
...@@ -466,30 +474,18 @@ static struct pxafb_mach_info palmt5_lcd_screen = { ...@@ -466,30 +474,18 @@ static struct pxafb_mach_info palmt5_lcd_screen = {
/****************************************************************************** /******************************************************************************
* Power management - standby * Power management - standby
******************************************************************************/ ******************************************************************************/
#ifdef CONFIG_PM static void __init palmt5_pm_init(void)
static u32 *addr __initdata;
static u32 resume[3] __initdata = {
0xe3a00101, /* mov r0, #0x40000000 */
0xe380060f, /* orr r0, r0, #0x00f00000 */
0xe590f008, /* ldr pc, [r0, #0x08] */
};
static int __init palmt5_pm_init(void)
{ {
int i; static u32 resume[] = {
0xe3a00101, /* mov r0, #0x40000000 */
/* this is where the bootloader jumps */ 0xe380060f, /* orr r0, r0, #0x00f00000 */
addr = phys_to_virt(PALMT5_STR_BASE); 0xe590f008, /* ldr pc, [r0, #0x08] */
};
for (i = 0; i < 3; i++)
addr[i] = resume[i]; /* copy the bootloader */
memcpy(phys_to_virt(PALMT5_STR_BASE), resume, sizeof(resume));
return 0;
} }
device_initcall(palmt5_pm_init);
#endif
/****************************************************************************** /******************************************************************************
* Machine init * Machine init
******************************************************************************/ ******************************************************************************/
...@@ -500,6 +496,7 @@ static struct platform_device *devices[] __initdata = { ...@@ -500,6 +496,7 @@ static struct platform_device *devices[] __initdata = {
&palmt5_backlight, &palmt5_backlight,
&power_supply, &power_supply,
&palmt5_asoc, &palmt5_asoc,
&palmt5_gpio_vbus,
}; };
/* setup udc GPIOs initial state */ /* setup udc GPIOs initial state */
...@@ -515,14 +512,15 @@ static void __init palmt5_init(void) ...@@ -515,14 +512,15 @@ static void __init palmt5_init(void)
{ {
pxa2xx_mfp_config(ARRAY_AND_SIZE(palmt5_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(palmt5_pin_config));
palmt5_pm_init();
set_pxa_fb_info(&palmt5_lcd_screen); set_pxa_fb_info(&palmt5_lcd_screen);
pxa_set_mci_info(&palmt5_mci_platform_data); pxa_set_mci_info(&palmt5_mci_platform_data);
palmt5_udc_init(); palmt5_udc_init();
pxa_set_ac97_info(&palmt5_ac97_pdata); pxa_set_ac97_info(&palmt5_ac97_pdata);
pxa_set_udc_info(&palmt5_udc_info);
pxa_set_ficp_info(&palmt5_ficp_platform_data); pxa_set_ficp_info(&palmt5_ficp_platform_data);
pxa_set_keypad_info(&palmt5_keypad_platform_data); pxa_set_keypad_info(&palmt5_keypad_platform_data);
wm97xx_bat_set_pdata(&wm97xx_batt_pdata); wm97xx_bat_set_pdata(&wm97xx_batt_pdata);
platform_add_devices(devices, ARRAY_SIZE(devices)); platform_add_devices(devices, ARRAY_SIZE(devices));
} }
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include <linux/gpio.h> #include <linux/gpio.h>
#include <linux/wm97xx_batt.h> #include <linux/wm97xx_batt.h>
#include <linux/power_supply.h> #include <linux/power_supply.h>
#include <linux/usb/gpio_vbus.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
...@@ -37,6 +38,7 @@ ...@@ -37,6 +38,7 @@
#include <mach/mfp-pxa25x.h> #include <mach/mfp-pxa25x.h>
#include <mach/irda.h> #include <mach/irda.h>
#include <mach/udc.h> #include <mach/udc.h>
#include <mach/palmasoc.h>
#include "generic.h" #include "generic.h"
#include "devices.h" #include "devices.h"
...@@ -107,6 +109,7 @@ static unsigned long palmte2_pin_config[] __initdata = { ...@@ -107,6 +109,7 @@ static unsigned long palmte2_pin_config[] __initdata = {
GPIO1_RST, /* reset */ GPIO1_RST, /* reset */
GPIO4_GPIO, /* Hotsync button */ GPIO4_GPIO, /* Hotsync button */
GPIO9_GPIO, /* power detect */ GPIO9_GPIO, /* power detect */
GPIO15_GPIO, /* earphone detect */
GPIO37_GPIO, /* LCD power */ GPIO37_GPIO, /* LCD power */
GPIO56_GPIO, /* Backlight power */ GPIO56_GPIO, /* Backlight power */
}; };
...@@ -318,11 +321,18 @@ static struct pxaficp_platform_data palmte2_ficp_platform_data = { ...@@ -318,11 +321,18 @@ static struct pxaficp_platform_data palmte2_ficp_platform_data = {
/****************************************************************************** /******************************************************************************
* UDC * UDC
******************************************************************************/ ******************************************************************************/
static struct pxa2xx_udc_mach_info palmte2_udc_info __initdata = { static struct gpio_vbus_mach_info palmte2_udc_info = {
.gpio_vbus = GPIO_NR_PALMTE2_USB_DETECT_N, .gpio_vbus = GPIO_NR_PALMTE2_USB_DETECT_N,
.gpio_vbus_inverted = 1, .gpio_vbus_inverted = 1,
.gpio_pullup = GPIO_NR_PALMTE2_USB_PULLUP, .gpio_pullup = GPIO_NR_PALMTE2_USB_PULLUP,
.gpio_pullup_inverted = 0, };
static struct platform_device palmte2_gpio_vbus = {
.name = "gpio-vbus",
.id = -1,
.dev = {
.platform_data = &palmte2_udc_info,
},
}; };
/****************************************************************************** /******************************************************************************
...@@ -394,6 +404,21 @@ static struct wm97xx_batt_info wm97xx_batt_pdata = { ...@@ -394,6 +404,21 @@ static struct wm97xx_batt_info wm97xx_batt_pdata = {
.batt_name = "main-batt", .batt_name = "main-batt",
}; };
/******************************************************************************
* aSoC audio
******************************************************************************/
static struct palm27x_asoc_info palmte2_asoc_pdata = {
.jack_gpio = GPIO_NR_PALMTE2_EARPHONE_DETECT,
};
static struct platform_device palmte2_asoc = {
.name = "palm27x-asoc",
.id = -1,
.dev = {
.platform_data = &palmte2_asoc_pdata,
},
};
/****************************************************************************** /******************************************************************************
* Framebuffer * Framebuffer
******************************************************************************/ ******************************************************************************/
...@@ -429,6 +454,8 @@ static struct platform_device *devices[] __initdata = { ...@@ -429,6 +454,8 @@ static struct platform_device *devices[] __initdata = {
#endif #endif
&palmte2_backlight, &palmte2_backlight,
&power_supply, &power_supply,
&palmte2_asoc,
&palmte2_gpio_vbus,
}; };
/* setup udc GPIOs initial state */ /* setup udc GPIOs initial state */
...@@ -447,7 +474,6 @@ static void __init palmte2_init(void) ...@@ -447,7 +474,6 @@ static void __init palmte2_init(void)
set_pxa_fb_info(&palmte2_lcd_screen); set_pxa_fb_info(&palmte2_lcd_screen);
pxa_set_mci_info(&palmte2_mci_platform_data); pxa_set_mci_info(&palmte2_mci_platform_data);
palmte2_udc_init(); palmte2_udc_init();
pxa_set_udc_info(&palmte2_udc_info);
pxa_set_ac97_info(NULL); pxa_set_ac97_info(NULL);
pxa_set_ficp_info(&palmte2_ficp_platform_data); pxa_set_ficp_info(&palmte2_ficp_platform_data);
wm97xx_bat_set_pdata(&wm97xx_batt_pdata); wm97xx_bat_set_pdata(&wm97xx_batt_pdata);
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include <linux/gpio.h> #include <linux/gpio.h>
#include <linux/wm97xx_batt.h> #include <linux/wm97xx_batt.h>
#include <linux/power_supply.h> #include <linux/power_supply.h>
#include <linux/usb/gpio_vbus.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
...@@ -359,11 +360,18 @@ static struct pxaficp_platform_data palmtx_ficp_platform_data = { ...@@ -359,11 +360,18 @@ static struct pxaficp_platform_data palmtx_ficp_platform_data = {
/****************************************************************************** /******************************************************************************
* UDC * UDC
******************************************************************************/ ******************************************************************************/
static struct pxa2xx_udc_mach_info palmtx_udc_info __initdata = { static struct gpio_vbus_mach_info palmtx_udc_info = {
.gpio_vbus = GPIO_NR_PALMTX_USB_DETECT_N, .gpio_vbus = GPIO_NR_PALMTX_USB_DETECT_N,
.gpio_vbus_inverted = 1, .gpio_vbus_inverted = 1,
.gpio_pullup = GPIO_NR_PALMTX_USB_PULLUP, .gpio_pullup = GPIO_NR_PALMTX_USB_PULLUP,
.gpio_pullup_inverted = 0, };
static struct platform_device palmtx_gpio_vbus = {
.name = "gpio-vbus",
.id = -1,
.dev = {
.platform_data = &palmtx_udc_info,
},
}; };
/****************************************************************************** /******************************************************************************
...@@ -483,30 +491,18 @@ static struct pxafb_mach_info palmtx_lcd_screen = { ...@@ -483,30 +491,18 @@ static struct pxafb_mach_info palmtx_lcd_screen = {
/****************************************************************************** /******************************************************************************
* Power management - standby * Power management - standby
******************************************************************************/ ******************************************************************************/
#ifdef CONFIG_PM static void __init palmtx_pm_init(void)
static u32 *addr __initdata;
static u32 resume[3] __initdata = {
0xe3a00101, /* mov r0, #0x40000000 */
0xe380060f, /* orr r0, r0, #0x00f00000 */
0xe590f008, /* ldr pc, [r0, #0x08] */
};
static int __init palmtx_pm_init(void)
{ {
int i; static u32 resume[] = {
0xe3a00101, /* mov r0, #0x40000000 */
/* this is where the bootloader jumps */ 0xe380060f, /* orr r0, r0, #0x00f00000 */
addr = phys_to_virt(PALMTX_STR_BASE); 0xe590f008, /* ldr pc, [r0, #0x08] */
};
for (i = 0; i < 3; i++)
addr[i] = resume[i]; /* copy the bootloader */
memcpy(phys_to_virt(PALMTX_STR_BASE), resume, sizeof(resume));
return 0;
} }
device_initcall(palmtx_pm_init);
#endif
/****************************************************************************** /******************************************************************************
* Machine init * Machine init
******************************************************************************/ ******************************************************************************/
...@@ -517,6 +513,7 @@ static struct platform_device *devices[] __initdata = { ...@@ -517,6 +513,7 @@ static struct platform_device *devices[] __initdata = {
&palmtx_backlight, &palmtx_backlight,
&power_supply, &power_supply,
&palmtx_asoc, &palmtx_asoc,
&palmtx_gpio_vbus,
}; };
static struct map_desc palmtx_io_desc[] __initdata = { static struct map_desc palmtx_io_desc[] __initdata = {
...@@ -548,11 +545,11 @@ static void __init palmtx_init(void) ...@@ -548,11 +545,11 @@ static void __init palmtx_init(void)
{ {
pxa2xx_mfp_config(ARRAY_AND_SIZE(palmtx_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(palmtx_pin_config));
palmtx_pm_init();
set_pxa_fb_info(&palmtx_lcd_screen); set_pxa_fb_info(&palmtx_lcd_screen);
pxa_set_mci_info(&palmtx_mci_platform_data); pxa_set_mci_info(&palmtx_mci_platform_data);
palmtx_udc_init(); palmtx_udc_init();
pxa_set_ac97_info(&palmtx_ac97_pdata); pxa_set_ac97_info(&palmtx_ac97_pdata);
pxa_set_udc_info(&palmtx_udc_info);
pxa_set_ficp_info(&palmtx_ficp_platform_data); pxa_set_ficp_info(&palmtx_ficp_platform_data);
pxa_set_keypad_info(&palmtx_keypad_platform_data); pxa_set_keypad_info(&palmtx_keypad_platform_data);
wm97xx_bat_set_pdata(&wm97xx_batt_pdata); wm97xx_bat_set_pdata(&wm97xx_batt_pdata);
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
#include <media/soc_camera.h> #include <media/soc_camera.h>
#include <asm/gpio.h> #include <asm/gpio.h>
#include <mach/i2c.h> #include <plat/i2c.h>
#include <mach/camera.h> #include <mach/camera.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <mach/pxa27x.h> #include <mach/pxa27x.h>
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <mach/pxa930.h> #include <mach/pxa930.h>
#include <mach/i2c.h> #include <plat/i2c.h>
#include <mach/pxafb.h> #include <mach/pxafb.h>
#include "devices.h" #include "devices.h"
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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