提交 4567c4a8 编写于 作者: R Russell King

Merge branch 'devel' of...

Merge branch 'devel' of git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6 into devel-stable
...@@ -707,6 +707,19 @@ L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) ...@@ -707,6 +707,19 @@ L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
S: Maintained S: Maintained
F: arch/arm/mach-ixp4xx/ F: arch/arm/mach-ixp4xx/
ARM/INTEL RESEARCH IMOTE 2 MACHINE SUPPORT
M: Jonathan Cameron <jic23@cam.ac.uk>
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
S: Maintained
F: arch/arm/mach-pxa/imote2.c
ARM/INTEL RESEARCH STARGATE 2 MACHINE SUPPORT
M: Jonathan Cameron <jic23@cam.ac.uk>
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
S: Maintained
F: arch/arm/mach-pxa/stargate2.c
F: drivers/pcmcia/pxa2xx_stargate2.c
ARM/INTEL XSC3 (MANZANO) ARM CORE ARM/INTEL XSC3 (MANZANO) ARM CORE
M: Lennert Buytenhek <kernel@wantstofly.org> M: Lennert Buytenhek <kernel@wantstofly.org>
M: Dan Williams <dan.j.williams@intel.com> M: Dan Williams <dan.j.williams@intel.com>
......
此差异已折叠。
此差异已折叠。
...@@ -13,6 +13,9 @@ ...@@ -13,6 +13,9 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/smc91x.h> #include <linux/smc91x.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h>
#include <linux/mtd/nand.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
...@@ -85,12 +88,48 @@ static struct platform_device smc91x_device = { ...@@ -85,12 +88,48 @@ static struct platform_device smc91x_device = {
.resource = smc91x_resources, .resource = smc91x_resources,
}; };
static struct mtd_partition aspenite_nand_partitions[] = {
{
.name = "bootloader",
.offset = 0,
.size = SZ_1M,
.mask_flags = MTD_WRITEABLE,
}, {
.name = "reserved",
.offset = MTDPART_OFS_APPEND,
.size = SZ_128K,
.mask_flags = MTD_WRITEABLE,
}, {
.name = "reserved",
.offset = MTDPART_OFS_APPEND,
.size = SZ_8M,
.mask_flags = MTD_WRITEABLE,
}, {
.name = "kernel",
.offset = MTDPART_OFS_APPEND,
.size = (SZ_2M + SZ_1M),
.mask_flags = 0,
}, {
.name = "filesystem",
.offset = MTDPART_OFS_APPEND,
.size = SZ_48M,
.mask_flags = 0,
}
};
static struct pxa3xx_nand_platform_data aspenite_nand_info = {
.enable_arbiter = 1,
.parts = aspenite_nand_partitions,
.nr_parts = ARRAY_SIZE(aspenite_nand_partitions),
};
static void __init common_init(void) static void __init common_init(void)
{ {
mfp_config(ARRAY_AND_SIZE(common_pin_config)); mfp_config(ARRAY_AND_SIZE(common_pin_config));
/* on-chip devices */ /* on-chip devices */
pxa168_add_uart(1); pxa168_add_uart(1);
pxa168_add_nand(&aspenite_nand_info);
/* off-chip devices */ /* off-chip devices */
platform_device_register(&smc91x_device); platform_device_register(&smc91x_device);
......
...@@ -34,6 +34,21 @@ struct clkops apbc_clk_ops = { ...@@ -34,6 +34,21 @@ struct clkops apbc_clk_ops = {
.disable = apbc_clk_disable, .disable = apbc_clk_disable,
}; };
static void apmu_clk_enable(struct clk *clk)
{
__raw_writel(clk->enable_val, clk->clk_rst);
}
static void apmu_clk_disable(struct clk *clk)
{
__raw_writel(0, clk->clk_rst);
}
struct clkops apmu_clk_ops = {
.enable = apmu_clk_enable,
.disable = apmu_clk_disable,
};
static DEFINE_SPINLOCK(clocks_lock); static DEFINE_SPINLOCK(clocks_lock);
int clk_enable(struct clk *clk) int clk_enable(struct clk *clk)
......
...@@ -25,6 +25,7 @@ struct clk { ...@@ -25,6 +25,7 @@ struct clk {
}; };
extern struct clkops apbc_clk_ops; extern struct clkops apbc_clk_ops;
extern struct clkops apmu_clk_ops;
#define APBC_CLK(_name, _reg, _fnclksel, _rate) \ #define APBC_CLK(_name, _reg, _fnclksel, _rate) \
struct clk clk_##_name = { \ struct clk clk_##_name = { \
......
...@@ -31,7 +31,9 @@ ...@@ -31,7 +31,9 @@
#define IRQ_PXA168_DDR_INT 26 #define IRQ_PXA168_DDR_INT 26
#define IRQ_PXA168_UART1 27 #define IRQ_PXA168_UART1 27
#define IRQ_PXA168_UART2 28 #define IRQ_PXA168_UART2 28
#define IRQ_PXA168_UART3 29
#define IRQ_PXA168_WDT 35 #define IRQ_PXA168_WDT 35
#define IRQ_PXA168_MAIN_PMU 36
#define IRQ_PXA168_FRQ_CHANGE 38 #define IRQ_PXA168_FRQ_CHANGE 38
#define IRQ_PXA168_SDH1 39 #define IRQ_PXA168_SDH1 39
#define IRQ_PXA168_SDH2 40 #define IRQ_PXA168_SDH2 40
...@@ -46,7 +48,7 @@ ...@@ -46,7 +48,7 @@
#define IRQ_PXA168_USB2 51 #define IRQ_PXA168_USB2 51
#define IRQ_PXA168_AC97 57 #define IRQ_PXA168_AC97 57
#define IRQ_PXA168_TWSI1 58 #define IRQ_PXA168_TWSI1 58
#define IRQ_PXA168_PMU 60 #define IRQ_PXA168_AP_PMU 60
#define IRQ_PXA168_SM_INT 63 #define IRQ_PXA168_SM_INT 63
/* /*
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include <linux/i2c.h> #include <linux/i2c.h>
#include <mach/devices.h> #include <mach/devices.h>
#include <plat/i2c.h> #include <plat/i2c.h>
#include <plat/pxa3xx_nand.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;
...@@ -13,6 +14,7 @@ extern struct pxa_device_desc pxa168_device_pwm1; ...@@ -13,6 +14,7 @@ extern struct pxa_device_desc pxa168_device_pwm1;
extern struct pxa_device_desc pxa168_device_pwm2; extern struct pxa_device_desc pxa168_device_pwm2;
extern struct pxa_device_desc pxa168_device_pwm3; extern struct pxa_device_desc pxa168_device_pwm3;
extern struct pxa_device_desc pxa168_device_pwm4; extern struct pxa_device_desc pxa168_device_pwm4;
extern struct pxa_device_desc pxa168_device_nand;
static inline int pxa168_add_uart(int id) static inline int pxa168_add_uart(int id)
{ {
...@@ -64,4 +66,9 @@ static inline int pxa168_add_pwm(int id) ...@@ -64,4 +66,9 @@ static inline int pxa168_add_pwm(int id)
return pxa_register_device(d, NULL, 0); return pxa_register_device(d, NULL, 0);
} }
static inline int pxa168_add_nand(struct pxa3xx_nand_platform_data *info)
{
return pxa_register_device(&pxa168_device_nand, info, sizeof(*info));
}
#endif /* __ASM_MACH_PXA168_H */ #endif /* __ASM_MACH_PXA168_H */
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include <linux/i2c.h> #include <linux/i2c.h>
#include <mach/devices.h> #include <mach/devices.h>
#include <plat/i2c.h> #include <plat/i2c.h>
#include <plat/pxa3xx_nand.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;
...@@ -13,6 +14,7 @@ extern struct pxa_device_desc pxa910_device_pwm1; ...@@ -13,6 +14,7 @@ extern struct pxa_device_desc pxa910_device_pwm1;
extern struct pxa_device_desc pxa910_device_pwm2; extern struct pxa_device_desc pxa910_device_pwm2;
extern struct pxa_device_desc pxa910_device_pwm3; extern struct pxa_device_desc pxa910_device_pwm3;
extern struct pxa_device_desc pxa910_device_pwm4; extern struct pxa_device_desc pxa910_device_pwm4;
extern struct pxa_device_desc pxa910_device_nand;
static inline int pxa910_add_uart(int id) static inline int pxa910_add_uart(int id)
{ {
...@@ -64,4 +66,9 @@ static inline int pxa910_add_pwm(int id) ...@@ -64,4 +66,9 @@ static inline int pxa910_add_pwm(int id)
return pxa_register_device(d, NULL, 0); return pxa_register_device(d, NULL, 0);
} }
static inline int pxa910_add_nand(struct pxa3xx_nand_platform_data *info)
{
return pxa_register_device(&pxa910_device_nand, info, sizeof(*info));
}
#endif /* __ASM_MACH_PXA910_H */ #endif /* __ASM_MACH_PXA910_H */
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include <mach/addr-map.h> #include <mach/addr-map.h>
#include <mach/cputype.h> #include <mach/cputype.h>
#include <mach/regs-apbc.h> #include <mach/regs-apbc.h>
#include <mach/regs-apmu.h>
#include <mach/irqs.h> #include <mach/irqs.h>
#include <mach/gpio.h> #include <mach/gpio.h>
#include <mach/dma.h> #include <mach/dma.h>
...@@ -72,6 +73,8 @@ static APBC_CLK(pwm2, PXA168_PWM2, 1, 13000000); ...@@ -72,6 +73,8 @@ static APBC_CLK(pwm2, PXA168_PWM2, 1, 13000000);
static APBC_CLK(pwm3, PXA168_PWM3, 1, 13000000); static APBC_CLK(pwm3, PXA168_PWM3, 1, 13000000);
static APBC_CLK(pwm4, PXA168_PWM4, 1, 13000000); static APBC_CLK(pwm4, PXA168_PWM4, 1, 13000000);
static APMU_CLK(nand, NAND, 0x01db, 208000000);
/* 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),
...@@ -82,6 +85,7 @@ static struct clk_lookup pxa168_clkregs[] = { ...@@ -82,6 +85,7 @@ static struct clk_lookup pxa168_clkregs[] = {
INIT_CLKREG(&clk_pwm2, "pxa168-pwm.1", NULL), INIT_CLKREG(&clk_pwm2, "pxa168-pwm.1", NULL),
INIT_CLKREG(&clk_pwm3, "pxa168-pwm.2", NULL), INIT_CLKREG(&clk_pwm3, "pxa168-pwm.2", NULL),
INIT_CLKREG(&clk_pwm4, "pxa168-pwm.3", NULL), INIT_CLKREG(&clk_pwm4, "pxa168-pwm.3", NULL),
INIT_CLKREG(&clk_nand, "pxa3xx-nand", NULL),
}; };
static int __init pxa168_init(void) static int __init pxa168_init(void)
...@@ -127,3 +131,4 @@ PXA168_DEVICE(pwm1, "pxa168-pwm", 0, NONE, 0xd401a000, 0x10); ...@@ -127,3 +131,4 @@ PXA168_DEVICE(pwm1, "pxa168-pwm", 0, NONE, 0xd401a000, 0x10);
PXA168_DEVICE(pwm2, "pxa168-pwm", 1, NONE, 0xd401a400, 0x10); PXA168_DEVICE(pwm2, "pxa168-pwm", 1, NONE, 0xd401a400, 0x10);
PXA168_DEVICE(pwm3, "pxa168-pwm", 2, NONE, 0xd401a800, 0x10); PXA168_DEVICE(pwm3, "pxa168-pwm", 2, NONE, 0xd401a800, 0x10);
PXA168_DEVICE(pwm4, "pxa168-pwm", 3, NONE, 0xd401ac00, 0x10); PXA168_DEVICE(pwm4, "pxa168-pwm", 3, NONE, 0xd401ac00, 0x10);
PXA168_DEVICE(nand, "pxa3xx-nand", -1, NAND, 0xd4283000, 0x80, 97, 99);
...@@ -110,6 +110,8 @@ static APBC_CLK(pwm2, PXA910_PWM2, 1, 13000000); ...@@ -110,6 +110,8 @@ static APBC_CLK(pwm2, PXA910_PWM2, 1, 13000000);
static APBC_CLK(pwm3, PXA910_PWM3, 1, 13000000); static APBC_CLK(pwm3, PXA910_PWM3, 1, 13000000);
static APBC_CLK(pwm4, PXA910_PWM4, 1, 13000000); static APBC_CLK(pwm4, PXA910_PWM4, 1, 13000000);
static APMU_CLK(nand, NAND, 0x01db, 208000000);
/* 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),
...@@ -120,6 +122,7 @@ static struct clk_lookup pxa910_clkregs[] = { ...@@ -120,6 +122,7 @@ static struct clk_lookup pxa910_clkregs[] = {
INIT_CLKREG(&clk_pwm2, "pxa910-pwm.1", NULL), INIT_CLKREG(&clk_pwm2, "pxa910-pwm.1", NULL),
INIT_CLKREG(&clk_pwm3, "pxa910-pwm.2", NULL), INIT_CLKREG(&clk_pwm3, "pxa910-pwm.2", NULL),
INIT_CLKREG(&clk_pwm4, "pxa910-pwm.3", NULL), INIT_CLKREG(&clk_pwm4, "pxa910-pwm.3", NULL),
INIT_CLKREG(&clk_nand, "pxa3xx-nand", NULL),
}; };
static int __init pxa910_init(void) static int __init pxa910_init(void)
...@@ -174,3 +177,4 @@ PXA910_DEVICE(pwm1, "pxa910-pwm", 0, NONE, 0xd401a000, 0x10); ...@@ -174,3 +177,4 @@ PXA910_DEVICE(pwm1, "pxa910-pwm", 0, NONE, 0xd401a000, 0x10);
PXA910_DEVICE(pwm2, "pxa910-pwm", 1, NONE, 0xd401a400, 0x10); PXA910_DEVICE(pwm2, "pxa910-pwm", 1, NONE, 0xd401a400, 0x10);
PXA910_DEVICE(pwm3, "pxa910-pwm", 2, NONE, 0xd401a800, 0x10); PXA910_DEVICE(pwm3, "pxa910-pwm", 2, NONE, 0xd401a800, 0x10);
PXA910_DEVICE(pwm4, "pxa910-pwm", 3, NONE, 0xd401ac00, 0x10); PXA910_DEVICE(pwm4, "pxa910-pwm", 3, NONE, 0xd401ac00, 0x10);
PXA910_DEVICE(nand, "pxa3xx-nand", -1, NAND, 0xd4283000, 0x80, 97, 99);
...@@ -11,9 +11,13 @@ ...@@ -11,9 +11,13 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h>
#include <linux/mtd/onenand.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/mach/flash.h>
#include <mach/addr-map.h> #include <mach/addr-map.h>
#include <mach/mfp-pxa910.h> #include <mach/mfp-pxa910.h>
#include <mach/pxa910.h> #include <mach/pxa910.h>
...@@ -26,6 +30,86 @@ static unsigned long ttc_dkb_pin_config[] __initdata = { ...@@ -26,6 +30,86 @@ static unsigned long ttc_dkb_pin_config[] __initdata = {
/* UART2 */ /* UART2 */
GPIO47_UART2_RXD, GPIO47_UART2_RXD,
GPIO48_UART2_TXD, GPIO48_UART2_TXD,
/* DFI */
DF_IO0_ND_IO0,
DF_IO1_ND_IO1,
DF_IO2_ND_IO2,
DF_IO3_ND_IO3,
DF_IO4_ND_IO4,
DF_IO5_ND_IO5,
DF_IO6_ND_IO6,
DF_IO7_ND_IO7,
DF_IO8_ND_IO8,
DF_IO9_ND_IO9,
DF_IO10_ND_IO10,
DF_IO11_ND_IO11,
DF_IO12_ND_IO12,
DF_IO13_ND_IO13,
DF_IO14_ND_IO14,
DF_IO15_ND_IO15,
DF_nCS0_SM_nCS2_nCS0,
DF_ALE_SM_WEn_ND_ALE,
DF_CLE_SM_OEn_ND_CLE,
DF_WEn_DF_WEn,
DF_REn_DF_REn,
DF_RDY0_DF_RDY0,
};
static struct mtd_partition ttc_dkb_onenand_partitions[] = {
{
.name = "bootloader",
.offset = 0,
.size = SZ_1M,
.mask_flags = MTD_WRITEABLE,
}, {
.name = "reserved",
.offset = MTDPART_OFS_APPEND,
.size = SZ_128K,
.mask_flags = MTD_WRITEABLE,
}, {
.name = "reserved",
.offset = MTDPART_OFS_APPEND,
.size = SZ_8M,
.mask_flags = MTD_WRITEABLE,
}, {
.name = "kernel",
.offset = MTDPART_OFS_APPEND,
.size = (SZ_2M + SZ_1M),
.mask_flags = 0,
}, {
.name = "filesystem",
.offset = MTDPART_OFS_APPEND,
.size = SZ_48M,
.mask_flags = 0,
}
};
static struct onenand_platform_data ttc_dkb_onenand_info = {
.parts = ttc_dkb_onenand_partitions,
.nr_parts = ARRAY_SIZE(ttc_dkb_onenand_partitions),
};
static struct resource ttc_dkb_resource_onenand[] = {
[0] = {
.start = SMC_CS0_PHYS_BASE,
.end = SMC_CS0_PHYS_BASE + SZ_1M,
.flags = IORESOURCE_MEM,
},
};
static struct platform_device ttc_dkb_device_onenand = {
.name = "onenand-flash",
.id = -1,
.resource = ttc_dkb_resource_onenand,
.num_resources = ARRAY_SIZE(ttc_dkb_resource_onenand),
.dev = {
.platform_data = &ttc_dkb_onenand_info,
},
};
static struct platform_device *ttc_dkb_devices[] = {
&ttc_dkb_device_onenand,
}; };
static void __init ttc_dkb_init(void) static void __init ttc_dkb_init(void)
...@@ -34,6 +118,9 @@ static void __init ttc_dkb_init(void) ...@@ -34,6 +118,9 @@ static void __init ttc_dkb_init(void)
/* on-chip devices */ /* on-chip devices */
pxa910_add_uart(1); pxa910_add_uart(1);
/* off-chip devices */
platform_add_devices(ARRAY_AND_SIZE(ttc_dkb_devices));
} }
MACHINE_START(TTC_DKB, "PXA910-based TTC_DKB Development Platform") MACHINE_START(TTC_DKB, "PXA910-based TTC_DKB Development Platform")
......
...@@ -2,34 +2,105 @@ if ARCH_PXA ...@@ -2,34 +2,105 @@ if ARCH_PXA
menu "Intel PXA2xx/PXA3xx Implementations" menu "Intel PXA2xx/PXA3xx Implementations"
if PXA3xx comment "Intel/Marvell Dev Platforms (sorted by hardware release time)"
menu "Supported PXA3xx Processor Variants" config ARCH_LUBBOCK
bool "Intel DBPXA250 Development Platform (aka Lubbock)"
select PXA25x
select SA1111
select PXA_HAVE_BOARD_IRQS
config CPU_PXA300 config MACH_MAINSTONE
bool "PXA300 (codename Monahans-L)" bool "Intel HCDDBBVA0 Development Platform (aka Mainstone)"
select PXA27x
select HAVE_PWM
select PXA_HAVE_BOARD_IRQS
config CPU_PXA310 config MACH_ZYLONITE
bool "PXA310 (codename Monahans-LV)" bool
select PXA3xx
select PXA_SSP
select HAVE_PWM
select PXA_HAVE_BOARD_IRQS
config MACH_ZYLONITE300
bool "PXA3xx Development Platform (aka Zylonite) PXA300/310"
select CPU_PXA300 select CPU_PXA300
select CPU_PXA310
select MACH_ZYLONITE
config CPU_PXA320 config MACH_ZYLONITE320
bool "PXA320 (codename Monahans-P)" bool "PXA3xx Development Platform (aka Zylonite) PXA320"
select CPU_PXA320
select MACH_ZYLONITE
config CPU_PXA930 config MACH_LITTLETON
bool "PXA930 (codename Tavor-P)" bool "PXA3xx Form Factor Platform (aka Littleton)"
select PXA3xx
select PXA_SSP
config CPU_PXA935 config MACH_TAVOREVB
bool "PXA935 (codename Tavor-P65)" bool "PXA930 Evaluation Board (aka TavorEVB)"
select PXA3xx
select CPU_PXA930 select CPU_PXA930
config CPU_PXA950 config MACH_SAAR
bool "PXA950 (codename Tavor-PV2)" bool "PXA930 Handheld Platform (aka SAAR)"
select PXA3xx
select CPU_PXA930 select CPU_PXA930
endmenu comment "Third Party Dev Platforms (sorted by vendor name)"
endif config ARCH_PXA_IDP
bool "Accelent Xscale IDP"
select PXA25x
config ARCH_VIPER
bool "Arcom/Eurotech VIPER SBC"
select PXA25x
select ISA
select I2C_GPIO
select HAVE_PWM
select PXA_HAVE_BOARD_IRQS
select PXA_HAVE_ISA_IRQS
config MACH_BALLOON3
bool "Balloon 3 board"
select PXA27x
select IWMMXT
select PXA_HAVE_BOARD_IRQS
config MACH_CSB726
bool "Enable Cogent CSB726 System On a Module"
select PXA27x
select IWMMXT
help
Say Y here if you intend to run this kernel on a Cogent
CSB726 System On Module.
config CSB726_CSB701
bool "Enable support for CSB701 baseboard"
depends on MACH_CSB726
config MACH_ARMCORE
bool "CompuLab CM-X255/CM-X270 modules"
select PXA27x
select IWMMXT
select PXA25x
select PXA_SSP
config MACH_EM_X270
bool "CompuLab EM-x270 platform"
select PXA27x
config MACH_EXEDA
bool "CompuLab eXeda platform"
select PXA27x
config MACH_CM_X300
bool "CompuLab CM-X300 modules"
select PXA3xx
select CPU_PXA300
config ARCH_GUMSTIX config ARCH_GUMSTIX
bool "Gumstix XScale 255 boards" bool "Gumstix XScale 255 boards"
...@@ -62,185 +133,24 @@ config MACH_STARGATE2 ...@@ -62,185 +133,24 @@ config MACH_STARGATE2
select IWMMXT select IWMMXT
select PXA_HAVE_BOARD_IRQS select PXA_HAVE_BOARD_IRQS
config ARCH_LUBBOCK config MACH_XCEP
bool "Intel DBPXA250 Development Platform" bool "Iskratel Electronics XCEP"
select PXA25x
select SA1111
select PXA_HAVE_BOARD_IRQS
config MACH_LOGICPD_PXA270
bool "LogicPD PXA270 Card Engine Development Platform"
select PXA27x
select HAVE_PWM
select PXA_HAVE_BOARD_IRQS
config MACH_MAINSTONE
bool "Intel HCDDBBVA0 Development Platform"
select PXA27x
select HAVE_PWM
select PXA_HAVE_BOARD_IRQS
config MACH_MP900C
bool "Nec Mobilepro 900/c"
select PXA25x
config MACH_BALLOON3
bool "Balloon 3 board"
select PXA27x
select IWMMXT
select PXA_HAVE_BOARD_IRQS
config ARCH_PXA_IDP
bool "Accelent Xscale IDP"
select PXA25x
config PXA_SHARPSL
bool "SHARP Zaurus SL-5600, SL-C7xx and SL-Cxx00 Models"
select SHARP_SCOOP
select SHARP_PARAM
help
Say Y here if you intend to run this kernel on a
Sharp Zaurus SL-5600 (Poodle), SL-C700 (Corgi),
SL-C750 (Shepherd), SL-C760 (Husky), SL-C1000 (Akita),
SL-C3000 (Spitz), SL-C3100 (Borzoi) or SL-C6000x (Tosa)
handheld computer.
config SHARPSL_PM
bool
select APM_EMULATION
config CORGI_SSP_DEPRECATED
bool
select PXA_SSP
help
This option will include corgi_ssp.c and corgi_lcd.c
that corgi_ts.c and other legacy drivers (corgi_bl.c
and sharpsl_pm.c) may depend on.
config MACH_POODLE
bool "Enable Sharp SL-5600 (Poodle) Support"
depends on PXA_SHARPSL
select PXA25x select PXA25x
select SHARP_LOCOMO select MTD
select MTD_PARTITIONS
select MTD_PHYSMAP
select MTD_CFI_INTELEXT
select MTD_CFI
select MTD_CHAR
select SMC91X
select PXA_SSP select PXA_SSP
config MACH_CORGI
bool "Enable Sharp SL-C700 (Corgi) Support"
depends on PXA_SHARPSL
select PXA25x
select PXA_SHARP_C7xx
config MACH_SHEPHERD
bool "Enable Sharp SL-C750 (Shepherd) Support"
depends on PXA_SHARPSL
select PXA25x
select PXA_SHARP_C7xx
config MACH_HUSKY
bool "Enable Sharp SL-C760 (Husky) Support"
depends on PXA_SHARPSL
select PXA25x
select PXA_SHARP_C7xx
config MACH_AKITA
bool "Enable Sharp SL-1000 (Akita) Support"
depends on PXA_SHARPSL
select PXA27x
select PXA_SHARP_Cxx00
select MACH_SPITZ
select I2C
select I2C_PXA
config MACH_SPITZ
bool "Enable Sharp Zaurus SL-3000 (Spitz) Support"
depends on PXA_SHARPSL
select PXA27x
select PXA_SHARP_Cxx00
config MACH_BORZOI
bool "Enable Sharp Zaurus SL-3100 (Borzoi) Support"
depends on PXA_SHARPSL
select PXA27x
select PXA_SHARP_Cxx00
config MACH_TOSA
bool "Enable Sharp SL-6000x (Tosa) Support"
depends on PXA_SHARPSL
select PXA25x
select PXA_HAVE_BOARD_IRQS
config ARCH_VIPER
bool "Arcom/Eurotech VIPER SBC"
select PXA25x
select ISA
select I2C_GPIO
select HAVE_PWM
select PXA_HAVE_BOARD_IRQS
select PXA_HAVE_ISA_IRQS
config ARCH_PXA_ESERIES
bool "PXA based Toshiba e-series PDAs"
select PXA25x
select PXA_HAVE_BOARD_IRQS
config MACH_E330
bool "Toshiba e330"
default y
depends on ARCH_PXA_ESERIES
help
Say Y here if you intend to run this kernel on a Toshiba
e330 family PDA.
config MACH_E350
bool "Toshiba e350"
default y
depends on ARCH_PXA_ESERIES
help
Say Y here if you intend to run this kernel on a Toshiba
e350 family PDA.
config MACH_E740
bool "Toshiba e740"
default y
depends on ARCH_PXA_ESERIES
select FB_W100
help help
Say Y here if you intend to run this kernel on a Toshiba PXA255 based Single Board Computer with SMC 91C111 ethernet chip and 64 MB of flash.
e740 family PDA. Tuned for usage in Libera instruments for particle accelerators.
config MACH_E750
bool "Toshiba e750"
default y
depends on ARCH_PXA_ESERIES
select FB_W100
help
Say Y here if you intend to run this kernel on a Toshiba
e750 family PDA.
config MACH_E400
bool "Toshiba e400"
default y
depends on ARCH_PXA_ESERIES
help
Say Y here if you intend to run this kernel on a Toshiba
e400 family PDA.
config MACH_E800
bool "Toshiba e800"
default y
depends on ARCH_PXA_ESERIES
select FB_W100
help
Say Y here if you intend to run this kernel on a Toshiba
e800 family PDA.
config TRIZEPS_PXA config TRIZEPS_PXA
bool "PXA based Keith und Koep Trizeps DIMM-Modules" bool "PXA based Keith und Koep Trizeps DIMM-Modules"
config MACH_H5000
bool "HP iPAQ h5000"
select PXA25x
config MACH_TRIZEPS4 config MACH_TRIZEPS4
bool "Keith und Koep Trizeps4 DIMM-Module" bool "Keith und Koep Trizeps4 DIMM-Module"
depends on TRIZEPS_PXA depends on TRIZEPS_PXA
...@@ -274,13 +184,38 @@ config TRIZEPS_PCMCIA ...@@ -274,13 +184,38 @@ config TRIZEPS_PCMCIA
help help
Enable PCMCIA support for Trizeps modules Enable PCMCIA support for Trizeps modules
config MACH_EM_X270 config MACH_LOGICPD_PXA270
bool "CompuLab EM-x270 platform" bool "LogicPD PXA270 Card Engine Development Platform"
select PXA27x select PXA27x
select HAVE_PWM
select PXA_HAVE_BOARD_IRQS
config MACH_EXEDA config MACH_PCM027
bool "CompuLab eXeda platform" bool "Phytec phyCORE-PXA270 CPU module (PCM-027)"
select PXA27x select PXA27x
select IWMMXT
select PXA_SSP
select PXA_HAVE_BOARD_IRQS
config MACH_PCM990_BASEBOARD
bool "PHYTEC PCM-990 development board"
select HAVE_PWM
depends on MACH_PCM027
choice
prompt "display on pcm990"
depends on MACH_PCM990_BASEBOARD
config PCM990_DISPLAY_SHARP
bool "sharp lq084v1dg21 stn display"
config PCM990_DISPLAY_NEC
bool "nec nl6448bc20_18d tft display"
config PCM990_DISPLAY_NONE
bool "no display"
endchoice
config MACH_COLIBRI config MACH_COLIBRI
bool "Toradex Colibri PXA270" bool "Toradex Colibri PXA270"
...@@ -290,45 +225,15 @@ config MACH_COLIBRI300 ...@@ -290,45 +225,15 @@ config MACH_COLIBRI300
bool "Toradex Colibri PXA300/310" bool "Toradex Colibri PXA300/310"
select PXA3xx select PXA3xx
select CPU_PXA300 select CPU_PXA300
select CPU_PXA310
select HAVE_PWM
config MACH_COLIBRI320 config MACH_COLIBRI320
bool "Toradex Colibri PXA320" bool "Toradex Colibri PXA320"
select PXA3xx select PXA3xx
select CPU_PXA320 select CPU_PXA320
config MACH_ZYLONITE comment "End-user Products (sorted by vendor name)"
bool "PXA3xx Development Platform (aka Zylonite)"
select PXA3xx
select PXA_SSP
select HAVE_PWM
select PXA_HAVE_BOARD_IRQS
config MACH_LITTLETON
bool "PXA3xx Form Factor Platform (aka Littleton)"
select PXA3xx
select PXA_SSP
config MACH_TAVOREVB
bool "PXA930 Evaluation Board (aka TavorEVB)"
select PXA3xx
select CPU_PXA930
config MACH_SAAR
bool "PXA930 Handheld Platform (aka SAAR)"
select PXA3xx
select CPU_PXA930
config MACH_ARMCORE
bool "CompuLab CM-X255/CM-X270 modules"
select PXA27x
select IWMMXT
select PXA25x
select PXA_SSP
config MACH_CM_X300
bool "CompuLab CM-X300 modules"
select PXA3xx
select CPU_PXA300
config MACH_H4700 config MACH_H4700
bool "HP iPAQ hx4700" bool "HP iPAQ hx4700"
...@@ -338,6 +243,15 @@ config MACH_H4700 ...@@ -338,6 +243,15 @@ config MACH_H4700
select HAVE_PWM select HAVE_PWM
select PXA_HAVE_BOARD_IRQS select PXA_HAVE_BOARD_IRQS
config MACH_H5000
bool "HP iPAQ h5000"
select PXA25x
config MACH_HIMALAYA
bool "HTC Himalaya Support"
select CPU_PXA26x
select FB_W100
config MACH_MAGICIAN config MACH_MAGICIAN
bool "Enable HTC Magician Support" bool "Enable HTC Magician Support"
select PXA27x select PXA27x
...@@ -346,11 +260,6 @@ config MACH_MAGICIAN ...@@ -346,11 +260,6 @@ config MACH_MAGICIAN
select HAVE_PWM select HAVE_PWM
select PXA_HAVE_BOARD_IRQS select PXA_HAVE_BOARD_IRQS
config MACH_HIMALAYA
bool "HTC Himalaya Support"
select CPU_PXA26x
select FB_W100
config MACH_MIOA701 config MACH_MIOA701
bool "Mitac Mio A701 Support" bool "Mitac Mio A701 Support"
select PXA27x select PXA27x
...@@ -362,13 +271,47 @@ config MACH_MIOA701 ...@@ -362,13 +271,47 @@ config MACH_MIOA701
MIO A701. Currently there is only basic support MIO A701. Currently there is only basic support
for this PDA. for this PDA.
config MACH_PCM027 config PXA_EZX
bool "Phytec phyCORE-PXA270 CPU module (PCM-027)" bool "Motorola EZX Platform"
select PXA27x select PXA27x
select IWMMXT select IWMMXT
select PXA_SSP select HAVE_PWM
select PXA_HAVE_BOARD_IRQS select PXA_HAVE_BOARD_IRQS
config MACH_EZX_A780
bool "Motorola EZX A780"
default y
depends on PXA_EZX
config MACH_EZX_E680
bool "Motorola EZX E680"
default y
depends on PXA_EZX
config MACH_EZX_A1200
bool "Motorola EZX A1200"
default y
depends on PXA_EZX
config MACH_EZX_A910
bool "Motorola EZX A910"
default y
depends on PXA_EZX
config MACH_EZX_E6
bool "Motorola EZX E6"
default y
depends on PXA_EZX
config MACH_EZX_E2
bool "Motorola EZX E2"
default y
depends on PXA_EZX
config MACH_MP900C
bool "Nec Mobilepro 900/c"
select PXA25x
config ARCH_PXA_PALM config ARCH_PXA_PALM
bool "PXA based Palm PDAs" bool "PXA based Palm PDAs"
select HAVE_PWM select HAVE_PWM
...@@ -421,109 +364,172 @@ config MACH_PALMZ72 ...@@ -421,109 +364,172 @@ config MACH_PALMZ72
Say Y here if you intend to run this kernel on Palm Zire 72 Say Y here if you intend to run this kernel on Palm Zire 72
handheld computer. handheld computer.
config MACH_TREO680 config MACH_PALMLD
bool "Palm Treo 680" bool "Palm LifeDrive"
default y default y
depends on ARCH_PXA_PALM depends on ARCH_PXA_PALM
select PXA27x select PXA27x
select IWMMXT select IWMMXT
help help
Say Y here if you intend to run this kernel on Palm Treo 680 Say Y here if you intend to run this kernel on a Palm LifeDrive
handheld computer.
config PALM_TREO
bool
depends on ARCH_PXA_PALM
config MACH_CENTRO
bool "Palm Centro 685 (GSM)"
default y
depends on ARCH_PXA_PALM
select PXA27x
select IWMMXT
select PALM_TREO
help
Say Y here if you intend to run this kernel on Palm Centro 685 (GSM)
smartphone. smartphone.
config MACH_PALMLD config MACH_TREO680
bool "Palm LifeDrive" bool "Palm Treo 680"
default y default y
depends on ARCH_PXA_PALM depends on ARCH_PXA_PALM
select PXA27x select PXA27x
select IWMMXT select IWMMXT
select PALM_TREO
help help
Say Y here if you intend to run this kernel on a Palm LifeDrive Say Y here if you intend to run this kernel on Palm Treo 680
smartphone.
config PXA_SHARPSL
bool "SHARP Zaurus SL-5600, SL-C7xx and SL-Cxx00 Models"
select SHARP_SCOOP
select SHARP_PARAM
help
Say Y here if you intend to run this kernel on a
Sharp Zaurus SL-5600 (Poodle), SL-C700 (Corgi),
SL-C750 (Shepherd), SL-C760 (Husky), SL-C1000 (Akita),
SL-C3000 (Spitz), SL-C3100 (Borzoi) or SL-C6000x (Tosa)
handheld computer. handheld computer.
config MACH_PCM990_BASEBOARD config SHARPSL_PM
bool "PHYTEC PCM-990 development board" bool
select HAVE_PWM select APM_EMULATION
depends on MACH_PCM027
choice config CORGI_SSP_DEPRECATED
prompt "display on pcm990" bool
depends on MACH_PCM990_BASEBOARD select PXA_SSP
help
This option will include corgi_ssp.c and corgi_lcd.c
that corgi_ts.c and other legacy drivers (corgi_bl.c
and sharpsl_pm.c) may depend on.
config PCM990_DISPLAY_SHARP config MACH_POODLE
bool "sharp lq084v1dg21 stn display" bool "Enable Sharp SL-5600 (Poodle) Support"
depends on PXA_SHARPSL
select PXA25x
select SHARP_LOCOMO
select PXA_SSP
config PCM990_DISPLAY_NEC config MACH_CORGI
bool "nec nl6448bc20_18d tft display" bool "Enable Sharp SL-C700 (Corgi) Support"
depends on PXA_SHARPSL
select PXA25x
select PXA_SHARP_C7xx
config PCM990_DISPLAY_NONE config MACH_SHEPHERD
bool "no display" bool "Enable Sharp SL-C750 (Shepherd) Support"
depends on PXA_SHARPSL
select PXA25x
select PXA_SHARP_C7xx
endchoice config MACH_HUSKY
bool "Enable Sharp SL-C760 (Husky) Support"
depends on PXA_SHARPSL
select PXA25x
select PXA_SHARP_C7xx
config MACH_CSB726 config MACH_AKITA
bool "Enable Cogent CSB726 System On a Module" bool "Enable Sharp SL-1000 (Akita) Support"
depends on PXA_SHARPSL
select PXA27x select PXA27x
select IWMMXT select PXA_SHARP_Cxx00
help select MACH_SPITZ
Say Y here if you intend to run this kernel on a Cogent select I2C
CSB726 System On Module. select I2C_PXA
config CSB726_CSB701 config MACH_SPITZ
bool "Enable supprot for CSB701 baseboard" bool "Enable Sharp Zaurus SL-3000 (Spitz) Support"
depends on MACH_CSB726 depends on PXA_SHARPSL
select PXA27x
select PXA_SHARP_Cxx00
config PXA_EZX config MACH_BORZOI
bool "Motorola EZX Platform" bool "Enable Sharp Zaurus SL-3100 (Borzoi) Support"
depends on PXA_SHARPSL
select PXA27x select PXA27x
select IWMMXT select PXA_SHARP_Cxx00
select HAVE_PWM
config MACH_TOSA
bool "Enable Sharp SL-6000x (Tosa) Support"
depends on PXA_SHARPSL
select PXA25x
select PXA_HAVE_BOARD_IRQS select PXA_HAVE_BOARD_IRQS
config MACH_EZX_A780 config ARCH_PXA_ESERIES
bool "Motorola EZX A780" bool "PXA based Toshiba e-series PDAs"
default y select PXA25x
depends on PXA_EZX select PXA_HAVE_BOARD_IRQS
config MACH_EZX_E680 config MACH_E330
bool "Motorola EZX E680" bool "Toshiba e330"
default y default y
depends on PXA_EZX depends on ARCH_PXA_ESERIES
help
Say Y here if you intend to run this kernel on a Toshiba
e330 family PDA.
config MACH_EZX_A1200 config MACH_E350
bool "Motorola EZX A1200" bool "Toshiba e350"
default y default y
depends on PXA_EZX depends on ARCH_PXA_ESERIES
help
Say Y here if you intend to run this kernel on a Toshiba
e350 family PDA.
config MACH_EZX_A910 config MACH_E740
bool "Motorola EZX A910" bool "Toshiba e740"
default y default y
depends on PXA_EZX depends on ARCH_PXA_ESERIES
select FB_W100
help
Say Y here if you intend to run this kernel on a Toshiba
e740 family PDA.
config MACH_EZX_E6 config MACH_E750
bool "Motorola EZX E6" bool "Toshiba e750"
default y default y
depends on PXA_EZX depends on ARCH_PXA_ESERIES
select FB_W100
help
Say Y here if you intend to run this kernel on a Toshiba
e750 family PDA.
config MACH_EZX_E2 config MACH_E400
bool "Motorola EZX E2" bool "Toshiba e400"
default y default y
depends on PXA_EZX depends on ARCH_PXA_ESERIES
help
Say Y here if you intend to run this kernel on a Toshiba
e400 family PDA.
config MACH_XCEP config MACH_E800
bool "Iskratel Electronics XCEP" bool "Toshiba e800"
select PXA25x default y
select MTD depends on ARCH_PXA_ESERIES
select MTD_PARTITIONS select FB_W100
select MTD_PHYSMAP
select MTD_CFI_INTELEXT
select MTD_CFI
select MTD_CHAR
select SMC91X
select PXA_SSP
help help
PXA255 based Single Board Computer with SMC 91C111 ethernet chip and 64 MB of flash. Say Y here if you intend to run this kernel on a Toshiba
Tuned for usage in Libera instruments for particle accelerators. e800 family PDA.
endmenu endmenu
...@@ -551,6 +557,42 @@ config PXA3xx ...@@ -551,6 +557,42 @@ config PXA3xx
help help
Select code specific to PXA3xx variants Select code specific to PXA3xx variants
config CPU_PXA300
bool
select PXA3xx
help
PXA300 (codename Monahans-L)
config CPU_PXA310
bool
select CPU_PXA300
help
PXA310 (codename Monahans-LV)
config CPU_PXA320
bool
select PXA3xx
help
PXA320 (codename Monahans-P)
config CPU_PXA930
bool
select PXA3xx
help
PXA930 (codename Tavor-P)
config CPU_PXA935
bool
select CPU_PXA930
help
PXA935 (codename Tavor-P65)
config CPU_PXA950
bool
select CPU_PXA930
help
PXA950 (codename Tavor-PV2)
config PXA_SHARP_C7xx config PXA_SHARP_C7xx
bool bool
select PXA_SSP select PXA_SSP
......
...@@ -24,33 +24,63 @@ obj-$(CONFIG_CPU_PXA300) += pxa300.o ...@@ -24,33 +24,63 @@ obj-$(CONFIG_CPU_PXA300) += pxa300.o
obj-$(CONFIG_CPU_PXA320) += pxa320.o obj-$(CONFIG_CPU_PXA320) += pxa320.o
obj-$(CONFIG_CPU_PXA930) += pxa930.o obj-$(CONFIG_CPU_PXA930) += pxa930.o
# Specific board support # NOTE: keep the order of boards in accordance to their order in Kconfig
obj-$(CONFIG_ARCH_GUMSTIX) += gumstix.o
obj-$(CONFIG_GUMSTIX_AM200EPD) += am200epd.o # Intel/Marvell Dev Platforms
obj-$(CONFIG_GUMSTIX_AM300EPD) += am300epd.o
obj-$(CONFIG_ARCH_LUBBOCK) += lubbock.o obj-$(CONFIG_ARCH_LUBBOCK) += lubbock.o
obj-$(CONFIG_MACH_LOGICPD_PXA270) += lpd270.o
obj-$(CONFIG_MACH_MAINSTONE) += mainstone.o obj-$(CONFIG_MACH_MAINSTONE) += mainstone.o
obj-$(CONFIG_MACH_BALLOON3) += balloon3.o obj-$(CONFIG_MACH_ZYLONITE300) += zylonite.o zylonite_pxa300.o
obj-$(CONFIG_MACH_MP900C) += mp900.o obj-$(CONFIG_MACH_ZYLONITE320) += zylonite.o zylonite_pxa320.o
obj-$(CONFIG_MACH_LITTLETON) += littleton.o
obj-$(CONFIG_MACH_TAVOREVB) += tavorevb.o
obj-$(CONFIG_MACH_SAAR) += saar.o
# 3rd Party Dev Platforms
obj-$(CONFIG_ARCH_PXA_IDP) += idp.o obj-$(CONFIG_ARCH_PXA_IDP) += idp.o
obj-$(CONFIG_ARCH_VIPER) += viper.o
obj-$(CONFIG_MACH_BALLOON3) += balloon3.o
obj-$(CONFIG_MACH_CSB726) += csb726.o
obj-$(CONFIG_CSB726_CSB701) += csb701.o
obj-$(CONFIG_MACH_ARMCORE) += cm-x2xx.o cm-x255.o cm-x270.o
ifeq ($(CONFIG_PCI),y)
obj-$(CONFIG_MACH_ARMCORE) += cm-x2xx-pci.o
endif
obj-$(CONFIG_MACH_EM_X270) += em-x270.o
obj-$(CONFIG_MACH_CM_X300) += cm-x300.o
obj-$(CONFIG_ARCH_GUMSTIX) += gumstix.o
obj-$(CONFIG_GUMSTIX_AM200EPD) += am200epd.o
obj-$(CONFIG_GUMSTIX_AM300EPD) += am300epd.o
obj-$(CONFIG_MACH_INTELMOTE2) += imote2.o
obj-$(CONFIG_MACH_STARGATE2) += stargate2.o
obj-$(CONFIG_MACH_XCEP) += xcep.o
obj-$(CONFIG_MACH_TRIZEPS4) += trizeps4.o obj-$(CONFIG_MACH_TRIZEPS4) += trizeps4.o
obj-$(CONFIG_MACH_LOGICPD_PXA270) += lpd270.o
obj-$(CONFIG_MACH_PCM027) += pcm027.o
obj-$(CONFIG_MACH_PCM990_BASEBOARD) += pcm990-baseboard.o
obj-$(CONFIG_MACH_COLIBRI) += colibri-pxa270.o obj-$(CONFIG_MACH_COLIBRI) += colibri-pxa270.o
obj-$(CONFIG_MACH_COLIBRI300) += colibri-pxa3xx.o colibri-pxa300.o obj-$(CONFIG_MACH_COLIBRI300) += colibri-pxa3xx.o colibri-pxa300.o
obj-$(CONFIG_MACH_COLIBRI320) += colibri-pxa3xx.o colibri-pxa320.o obj-$(CONFIG_MACH_COLIBRI320) += colibri-pxa3xx.o colibri-pxa320.o
# End-user Products
obj-$(CONFIG_MACH_H4700) += hx4700.o
obj-$(CONFIG_MACH_H5000) += h5000.o obj-$(CONFIG_MACH_H5000) += h5000.o
obj-$(CONFIG_MACH_HIMALAYA) += himalaya.o
obj-$(CONFIG_MACH_MAGICIAN) += magician.o
obj-$(CONFIG_MACH_MIOA701) += mioa701.o mioa701_bootresume.o
obj-$(CONFIG_PXA_EZX) += ezx.o
obj-$(CONFIG_MACH_MP900C) += mp900.o
obj-$(CONFIG_MACH_PALMTE2) += palmte2.o
obj-$(CONFIG_MACH_PALMTC) += palmtc.o
obj-$(CONFIG_MACH_PALMT5) += palmt5.o
obj-$(CONFIG_MACH_PALMTX) += palmtx.o
obj-$(CONFIG_MACH_PALMZ72) += palmz72.o
obj-$(CONFIG_MACH_PALMLD) += palmld.o
obj-$(CONFIG_PALM_TREO) += palmtreo.o
obj-$(CONFIG_PXA_SHARP_C7xx) += corgi.o sharpsl_pm.o corgi_pm.o obj-$(CONFIG_PXA_SHARP_C7xx) += corgi.o sharpsl_pm.o corgi_pm.o
obj-$(CONFIG_PXA_SHARP_Cxx00) += spitz.o sharpsl_pm.o spitz_pm.o obj-$(CONFIG_PXA_SHARP_Cxx00) += spitz.o sharpsl_pm.o spitz_pm.o
obj-$(CONFIG_CORGI_SSP_DEPRECATED) += corgi_ssp.o corgi_lcd.o obj-$(CONFIG_CORGI_SSP_DEPRECATED) += corgi_ssp.o corgi_lcd.o
obj-$(CONFIG_MACH_POODLE) += poodle.o obj-$(CONFIG_MACH_POODLE) += poodle.o
obj-$(CONFIG_MACH_PCM027) += pcm027.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_H4700) += hx4700.o
obj-$(CONFIG_MACH_MAGICIAN) += magician.o
obj-$(CONFIG_MACH_HIMALAYA) += himalaya.o
obj-$(CONFIG_MACH_MIOA701) += mioa701.o mioa701_bootresume.o
obj-$(CONFIG_ARCH_PXA_ESERIES) += eseries.o obj-$(CONFIG_ARCH_PXA_ESERIES) += eseries.o
obj-$(CONFIG_MACH_E330) += e330.o obj-$(CONFIG_MACH_E330) += e330.o
obj-$(CONFIG_MACH_E350) += e350.o obj-$(CONFIG_MACH_E350) += e350.o
...@@ -58,34 +88,6 @@ obj-$(CONFIG_MACH_E740) += e740.o ...@@ -58,34 +88,6 @@ obj-$(CONFIG_MACH_E740) += e740.o
obj-$(CONFIG_MACH_E750) += e750.o obj-$(CONFIG_MACH_E750) += e750.o
obj-$(CONFIG_MACH_E400) += e400.o obj-$(CONFIG_MACH_E400) += e400.o
obj-$(CONFIG_MACH_E800) += e800.o obj-$(CONFIG_MACH_E800) += e800.o
obj-$(CONFIG_MACH_PALMTE2) += palmte2.o
obj-$(CONFIG_MACH_PALMTC) += palmtc.o
obj-$(CONFIG_MACH_PALMT5) += palmt5.o
obj-$(CONFIG_MACH_PALMTX) += palmtx.o
obj-$(CONFIG_MACH_PALMLD) += palmld.o
obj-$(CONFIG_MACH_PALMZ72) += palmz72.o
obj-$(CONFIG_MACH_TREO680) += treo680.o
obj-$(CONFIG_ARCH_VIPER) += viper.o
ifeq ($(CONFIG_MACH_ZYLONITE),y)
obj-y += zylonite.o
obj-$(CONFIG_CPU_PXA300) += zylonite_pxa300.o
obj-$(CONFIG_CPU_PXA320) += zylonite_pxa320.o
endif
obj-$(CONFIG_MACH_LITTLETON) += littleton.o
obj-$(CONFIG_MACH_TAVOREVB) += tavorevb.o
obj-$(CONFIG_MACH_SAAR) += saar.o
obj-$(CONFIG_MACH_ARMCORE) += cm-x2xx.o cm-x255.o cm-x270.o
obj-$(CONFIG_MACH_CM_X300) += cm-x300.o
obj-$(CONFIG_PXA_EZX) += ezx.o
obj-$(CONFIG_MACH_XCEP) += xcep.o
obj-$(CONFIG_MACH_INTELMOTE2) += imote2.o
obj-$(CONFIG_MACH_STARGATE2) += stargate2.o
obj-$(CONFIG_MACH_CSB726) += csb726.o
obj-$(CONFIG_CSB726_CSB701) += csb701.o
# Support for blinky lights # Support for blinky lights
led-y := leds.o led-y := leds.o
...@@ -95,8 +97,4 @@ led-$(CONFIG_ARCH_PXA_IDP) += leds-idp.o ...@@ -95,8 +97,4 @@ led-$(CONFIG_ARCH_PXA_IDP) += leds-idp.o
obj-$(CONFIG_LEDS) += $(led-y) obj-$(CONFIG_LEDS) += $(led-y)
ifeq ($(CONFIG_PCI),y)
obj-$(CONFIG_MACH_ARMCORE) += cm-x2xx-pci.o
endif
obj-$(CONFIG_TOSA_BT) += tosa-bt.o obj-$(CONFIG_TOSA_BT) += tosa-bt.o
...@@ -306,6 +306,10 @@ static void __init balloon3_init(void) ...@@ -306,6 +306,10 @@ static void __init balloon3_init(void)
*/ */
ARB_CNTRL = ARB_CORE_PARK | 0x234; ARB_CNTRL = ARB_CORE_PARK | 0x234;
pxa_set_ffuart_info(NULL);
pxa_set_btuart_info(NULL);
pxa_set_stuart_info(NULL);
pxa_set_i2c_info(NULL); pxa_set_i2c_info(NULL);
if (balloon3_has(BALLOON3_FEATURE_AUDIO)) if (balloon3_has(BALLOON3_FEATURE_AUDIO))
pxa_set_ac97_info(NULL); pxa_set_ac97_info(NULL);
......
...@@ -453,6 +453,10 @@ static inline void cmx2xx_init_ac97(void) {} ...@@ -453,6 +453,10 @@ static inline void cmx2xx_init_ac97(void) {}
static void __init cmx2xx_init(void) static void __init cmx2xx_init(void)
{ {
pxa_set_ffuart_info(NULL);
pxa_set_btuart_info(NULL);
pxa_set_stuart_info(NULL);
cmx2xx_pm_init(); cmx2xx_pm_init();
if (cpu_is_pxa25x()) if (cpu_is_pxa25x())
......
...@@ -3,9 +3,10 @@ ...@@ -3,9 +3,10 @@
* *
* Support for the CompuLab CM-X300 modules * Support for the CompuLab CM-X300 modules
* *
* Copyright (C) 2008 CompuLab Ltd. * Copyright (C) 2008,2009 CompuLab Ltd.
* *
* Mike Rapoport <mike@compulab.co.il> * Mike Rapoport <mike@compulab.co.il>
* Igor Grinberg <grinberg@compulab.co.il>
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License version 2 as
...@@ -16,30 +17,41 @@ ...@@ -16,30 +17,41 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/delay.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#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/rtc-v3020.h>
#include <linux/pwm_backlight.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/i2c/pca953x.h> #include <linux/i2c/pca953x.h>
#include <linux/mfd/da903x.h>
#include <linux/spi/spi.h>
#include <linux/spi/spi_gpio.h>
#include <linux/spi/tdo24m.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 <asm/setup.h>
#include <mach/pxa300.h> #include <mach/pxa300.h>
#include <mach/pxa27x-udc.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 <plat/i2c.h> #include <plat/i2c.h>
#include <mach/pxa3xx_nand.h> #include <plat/pxa3xx_nand.h>
#include <mach/audio.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include "generic.h" #include "generic.h"
#include "devices.h"
#define CM_X300_ETH_PHYS 0x08000010 #define CM_X300_ETH_PHYS 0x08000010
...@@ -53,7 +65,7 @@ ...@@ -53,7 +65,7 @@
#define GPIO97_RTC_RD (97) #define GPIO97_RTC_RD (97)
#define GPIO98_RTC_IO (98) #define GPIO98_RTC_IO (98)
static mfp_cfg_t cm_x300_mfp_cfg[] __initdata = { static mfp_cfg_t cm_x3xx_mfp_cfg[] __initdata = {
/* LCD */ /* LCD */
GPIO54_LCD_LDD_0, GPIO54_LCD_LDD_0,
GPIO55_LCD_LDD_1, GPIO55_LCD_LDD_1,
...@@ -137,7 +149,6 @@ static mfp_cfg_t cm_x300_mfp_cfg[] __initdata = { ...@@ -137,7 +149,6 @@ static mfp_cfg_t cm_x300_mfp_cfg[] __initdata = {
GPIO36_UART1_DTR, GPIO36_UART1_DTR,
/* GPIOs */ /* GPIOs */
GPIO79_GPIO, /* LED */
GPIO82_GPIO | MFP_PULL_HIGH, /* MMC CD */ GPIO82_GPIO | MFP_PULL_HIGH, /* MMC CD */
GPIO85_GPIO, /* MMC WP */ GPIO85_GPIO, /* MMC WP */
GPIO99_GPIO, /* Ethernet IRQ */ GPIO99_GPIO, /* Ethernet IRQ */
...@@ -151,6 +162,50 @@ static mfp_cfg_t cm_x300_mfp_cfg[] __initdata = { ...@@ -151,6 +162,50 @@ static mfp_cfg_t cm_x300_mfp_cfg[] __initdata = {
/* Standard I2C */ /* Standard I2C */
GPIO21_I2C_SCL, GPIO21_I2C_SCL,
GPIO22_I2C_SDA, GPIO22_I2C_SDA,
/* PWM Backlight */
GPIO19_PWM2_OUT,
};
static mfp_cfg_t cm_x3xx_rev_lt130_mfp_cfg[] __initdata = {
/* GPIOs */
GPIO79_GPIO, /* LED */
GPIO77_GPIO, /* WiFi reset */
GPIO78_GPIO, /* BT reset */
};
static mfp_cfg_t cm_x3xx_rev_ge130_mfp_cfg[] __initdata = {
/* GPIOs */
GPIO76_GPIO, /* LED */
GPIO71_GPIO, /* WiFi reset */
GPIO70_GPIO, /* BT reset */
};
static mfp_cfg_t cm_x310_mfp_cfg[] __initdata = {
/* USB PORT 2 */
ULPI_STP,
ULPI_NXT,
ULPI_DIR,
GPIO30_ULPI_DATA_OUT_0,
GPIO31_ULPI_DATA_OUT_1,
GPIO32_ULPI_DATA_OUT_2,
GPIO33_ULPI_DATA_OUT_3,
GPIO34_ULPI_DATA_OUT_4,
GPIO35_ULPI_DATA_OUT_5,
GPIO36_ULPI_DATA_OUT_6,
GPIO37_ULPI_DATA_OUT_7,
GPIO38_ULPI_CLK,
/* external PHY reset pin */
GPIO127_GPIO,
/* USB PORT 3 */
GPIO77_USB_P3_1,
GPIO78_USB_P3_2,
GPIO79_USB_P3_3,
GPIO80_USB_P3_4,
GPIO81_USB_P3_5,
GPIO82_USB_P3_6,
GPIO0_2_USBH_PEN,
}; };
#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE) #if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
...@@ -195,17 +250,18 @@ static void __init cm_x300_init_dm9000(void) ...@@ -195,17 +250,18 @@ static void __init cm_x300_init_dm9000(void)
static inline void cm_x300_init_dm9000(void) {} static inline void cm_x300_init_dm9000(void) {}
#endif #endif
/* LCD */
#if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE) #if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)
static struct pxafb_mode_info cm_x300_lcd_modes[] = { static struct pxafb_mode_info cm_x300_lcd_modes[] = {
[0] = { [0] = {
.pixclock = 38000, .pixclock = 38250,
.bpp = 16, .bpp = 16,
.xres = 480, .xres = 480,
.yres = 640, .yres = 640,
.hsync_len = 8, .hsync_len = 8,
.vsync_len = 2, .vsync_len = 2,
.left_margin = 8, .left_margin = 8,
.upper_margin = 0, .upper_margin = 2,
.right_margin = 24, .right_margin = 24,
.lower_margin = 4, .lower_margin = 4,
.cmap_greyscale = 0, .cmap_greyscale = 0,
...@@ -227,7 +283,7 @@ static struct pxafb_mode_info cm_x300_lcd_modes[] = { ...@@ -227,7 +283,7 @@ static struct pxafb_mode_info cm_x300_lcd_modes[] = {
static struct pxafb_mach_info cm_x300_lcd = { static struct pxafb_mach_info cm_x300_lcd = {
.modes = cm_x300_lcd_modes, .modes = cm_x300_lcd_modes,
.num_modes = 2, .num_modes = ARRAY_SIZE(cm_x300_lcd_modes),
.lcd_conn = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL, .lcd_conn = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
}; };
...@@ -239,6 +295,87 @@ static void __init cm_x300_init_lcd(void) ...@@ -239,6 +295,87 @@ static void __init cm_x300_init_lcd(void)
static inline void cm_x300_init_lcd(void) {} static inline void cm_x300_init_lcd(void) {}
#endif #endif
#if defined(CONFIG_BACKLIGHT_PWM) || defined(CONFIG_BACKLIGHT_PWM_MODULE)
static struct platform_pwm_backlight_data cm_x300_backlight_data = {
.pwm_id = 2,
.max_brightness = 100,
.dft_brightness = 100,
.pwm_period_ns = 10000,
};
static struct platform_device cm_x300_backlight_device = {
.name = "pwm-backlight",
.dev = {
.parent = &pxa27x_device_pwm0.dev,
.platform_data = &cm_x300_backlight_data,
},
};
static void cm_x300_init_bl(void)
{
platform_device_register(&cm_x300_backlight_device);
}
#else
static inline void cm_x300_init_bl(void) {}
#endif
#if defined(CONFIG_SPI_GPIO) || defined(CONFIG_SPI_GPIO_MODULE)
#define GPIO_LCD_BASE (144)
#define GPIO_LCD_DIN (GPIO_LCD_BASE + 8) /* aux_gpio3_0 */
#define GPIO_LCD_DOUT (GPIO_LCD_BASE + 9) /* aux_gpio3_1 */
#define GPIO_LCD_SCL (GPIO_LCD_BASE + 10) /* aux_gpio3_2 */
#define GPIO_LCD_CS (GPIO_LCD_BASE + 11) /* aux_gpio3_3 */
#define LCD_SPI_BUS_NUM (1)
static struct spi_gpio_platform_data cm_x300_spi_gpio_pdata = {
.sck = GPIO_LCD_SCL,
.mosi = GPIO_LCD_DIN,
.miso = GPIO_LCD_DOUT,
.num_chipselect = 1,
};
static struct platform_device cm_x300_spi_gpio = {
.name = "spi_gpio",
.id = LCD_SPI_BUS_NUM,
.dev = {
.platform_data = &cm_x300_spi_gpio_pdata,
},
};
static struct tdo24m_platform_data cm_x300_tdo24m_pdata = {
.model = TDO35S,
};
static struct spi_board_info cm_x300_spi_devices[] __initdata = {
{
.modalias = "tdo24m",
.max_speed_hz = 1000000,
.bus_num = LCD_SPI_BUS_NUM,
.chip_select = 0,
.controller_data = (void *) GPIO_LCD_CS,
.platform_data = &cm_x300_tdo24m_pdata,
},
};
static void __init cm_x300_init_spi(void)
{
spi_register_board_info(cm_x300_spi_devices,
ARRAY_SIZE(cm_x300_spi_devices));
platform_device_register(&cm_x300_spi_gpio);
}
#else
static inline void cm_x300_init_spi(void) {}
#endif
#if defined(CONFIG_SND_PXA2XX_LIB_AC97)
static void __init cm_x300_init_ac97(void)
{
pxa_set_ac97_info(NULL);
}
#else
static inline void cm_x300_init_ac97(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 cm_x300_nand_partitions[] = { static struct mtd_partition cm_x300_nand_partitions[] = {
[0] = { [0] = {
...@@ -333,9 +470,19 @@ static inline void cm_x300_init_mmc(void) {} ...@@ -333,9 +470,19 @@ static inline void cm_x300_init_mmc(void) {}
#endif #endif
#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 int cm_x300_ohci_init(struct device *dev)
{
if (cpu_is_pxa300())
UP2OCR = UP2OCR_HXS
| UP2OCR_HXOE | UP2OCR_DMPDE | UP2OCR_DPPDE;
return 0;
}
static struct pxaohci_platform_data cm_x300_ohci_platform_data = { static struct pxaohci_platform_data cm_x300_ohci_platform_data = {
.port_mode = PMM_PERPORT_MODE, .port_mode = PMM_PERPORT_MODE,
.flags = ENABLE_PORT1 | ENABLE_PORT2 | POWER_CONTROL_LOW, .flags = ENABLE_PORT_ALL | POWER_CONTROL_LOW,
.init = cm_x300_ohci_init,
}; };
static void __init cm_x300_init_ohci(void) static void __init cm_x300_init_ohci(void)
...@@ -351,7 +498,6 @@ static struct gpio_led cm_x300_leds[] = { ...@@ -351,7 +498,6 @@ static struct gpio_led cm_x300_leds[] = {
[0] = { [0] = {
.name = "cm-x300:green", .name = "cm-x300:green",
.default_trigger = "heartbeat", .default_trigger = "heartbeat",
.gpio = 79,
.active_low = 1, .active_low = 1,
}, },
}; };
...@@ -371,6 +517,11 @@ static struct platform_device cm_x300_led_device = { ...@@ -371,6 +517,11 @@ static struct platform_device cm_x300_led_device = {
static void __init cm_x300_init_leds(void) static void __init cm_x300_init_leds(void)
{ {
if (system_rev < 130)
cm_x300_leds[0].gpio = 79;
else
cm_x300_leds[0].gpio = 76;
platform_device_register(&cm_x300_led_device); platform_device_register(&cm_x300_led_device);
} }
#else #else
...@@ -433,11 +584,94 @@ static void __init cm_x300_init_rtc(void) ...@@ -433,11 +584,94 @@ static void __init cm_x300_init_rtc(void)
static inline void cm_x300_init_rtc(void) {} static inline void cm_x300_init_rtc(void) {}
#endif #endif
static void __init cm_x300_init(void) /* DA9030 */
struct da903x_subdev_info cm_x300_da9030_subdevs[] = {
{
.name = "da903x-backlight",
.id = DA9030_ID_WLED,
}
};
static struct da903x_platform_data cm_x300_da9030_info = {
.num_subdevs = ARRAY_SIZE(cm_x300_da9030_subdevs),
.subdevs = cm_x300_da9030_subdevs,
};
static struct i2c_board_info cm_x300_pmic_info = {
I2C_BOARD_INFO("da9030", 0x49),
.irq = IRQ_GPIO(0),
.platform_data = &cm_x300_da9030_info,
};
static struct i2c_pxa_platform_data cm_x300_pwr_i2c_info = {
.use_pio = 1,
};
static void __init cm_x300_init_da9030(void)
{
pxa3xx_set_i2c_power_info(&cm_x300_pwr_i2c_info);
i2c_register_board_info(1, &cm_x300_pmic_info, 1);
}
static void __init cm_x300_init_wi2wi(void)
{
int bt_reset, wlan_en;
int err;
if (system_rev < 130) {
wlan_en = 77;
bt_reset = 78;
} else {
wlan_en = 71;
bt_reset = 70;
}
/* Libertas and CSR reset */
err = gpio_request(wlan_en, "wlan en");
if (err) {
pr_err("CM-X300: failed to request wlan en gpio: %d\n", err);
} else {
gpio_direction_output(wlan_en, 1);
gpio_free(wlan_en);
}
err = gpio_request(bt_reset, "bt reset");
if (err) {
pr_err("CM-X300: failed to request bt reset gpio: %d\n", err);
} else {
gpio_direction_output(bt_reset, 1);
udelay(10);
gpio_set_value(bt_reset, 0);
udelay(10);
gpio_set_value(bt_reset, 1);
gpio_free(bt_reset);
}
}
/* MFP */
static void __init cm_x300_init_mfp(void)
{ {
/* board-processor specific GPIO initialization */ /* board-processor specific GPIO initialization */
pxa3xx_mfp_config(ARRAY_AND_SIZE(cm_x300_mfp_cfg)); pxa3xx_mfp_config(ARRAY_AND_SIZE(cm_x3xx_mfp_cfg));
if (system_rev < 130)
pxa3xx_mfp_config(ARRAY_AND_SIZE(cm_x3xx_rev_lt130_mfp_cfg));
else
pxa3xx_mfp_config(ARRAY_AND_SIZE(cm_x3xx_rev_ge130_mfp_cfg));
if (cpu_is_pxa310())
pxa3xx_mfp_config(ARRAY_AND_SIZE(cm_x310_mfp_cfg));
}
static void __init cm_x300_init(void)
{
cm_x300_init_mfp();
pxa_set_ffuart_info(NULL);
pxa_set_btuart_info(NULL);
pxa_set_stuart_info(NULL);
cm_x300_init_da9030();
cm_x300_init_dm9000(); cm_x300_init_dm9000();
cm_x300_init_lcd(); cm_x300_init_lcd();
cm_x300_init_ohci(); cm_x300_init_ohci();
...@@ -445,7 +679,11 @@ static void __init cm_x300_init(void) ...@@ -445,7 +679,11 @@ 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_spi();
cm_x300_init_rtc(); cm_x300_init_rtc();
cm_x300_init_ac97();
cm_x300_init_wi2wi();
cm_x300_init_bl();
} }
static void __init cm_x300_fixup(struct machine_desc *mdesc, struct tag *tags, static void __init cm_x300_fixup(struct machine_desc *mdesc, struct tag *tags,
......
...@@ -130,6 +130,9 @@ static struct platform_device *colibri_pxa270_devices[] __initdata = { ...@@ -130,6 +130,9 @@ static struct platform_device *colibri_pxa270_devices[] __initdata = {
static void __init colibri_pxa270_init(void) static void __init colibri_pxa270_init(void)
{ {
pxa2xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa270_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa270_pin_config));
pxa_set_ffuart_info(NULL);
pxa_set_btuart_info(NULL);
pxa_set_stuart_info(NULL);
platform_add_devices(ARRAY_AND_SIZE(colibri_pxa270_devices)); platform_add_devices(ARRAY_AND_SIZE(colibri_pxa270_devices));
} }
......
...@@ -170,6 +170,10 @@ static inline void colibri_pxa310_init_ac97(void) {} ...@@ -170,6 +170,10 @@ static inline void colibri_pxa310_init_ac97(void) {}
void __init colibri_pxa300_init(void) void __init colibri_pxa300_init(void)
{ {
pxa_set_ffuart_info(NULL);
pxa_set_btuart_info(NULL);
pxa_set_stuart_info(NULL);
colibri_pxa300_init_eth(); colibri_pxa300_init_eth();
colibri_pxa300_init_ohci(); colibri_pxa300_init_ohci();
colibri_pxa3xx_init_nand(); colibri_pxa3xx_init_nand();
......
...@@ -199,6 +199,10 @@ static void __init colibri_pxa320_init_uart(void) ...@@ -199,6 +199,10 @@ static void __init colibri_pxa320_init_uart(void)
void __init colibri_pxa320_init(void) void __init colibri_pxa320_init(void)
{ {
pxa_set_ffuart_info(NULL);
pxa_set_btuart_info(NULL);
pxa_set_stuart_info(NULL);
colibri_pxa320_init_eth(); colibri_pxa320_init_eth();
colibri_pxa320_init_ohci(); colibri_pxa320_init_ohci();
colibri_pxa3xx_init_nand(); colibri_pxa3xx_init_nand();
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
#include <mach/colibri.h> #include <mach/colibri.h>
#include <mach/mmc.h> #include <mach/mmc.h>
#include <mach/pxafb.h> #include <mach/pxafb.h>
#include <mach/pxa3xx_nand.h> #include <plat/pxa3xx_nand.h>
#include "generic.h" #include "generic.h"
#include "devices.h" #include "devices.h"
......
...@@ -671,6 +671,10 @@ static void __init corgi_init(void) ...@@ -671,6 +671,10 @@ static void __init corgi_init(void)
pxa2xx_mfp_config(ARRAY_AND_SIZE(corgi_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(corgi_pin_config));
pxa_set_ffuart_info(NULL);
pxa_set_btuart_info(NULL);
pxa_set_stuart_info(NULL);
corgi_init_spi(); corgi_init_spi();
pxa_set_udc_info(&udc_info); pxa_set_udc_info(&udc_info);
......
...@@ -214,8 +214,8 @@ static struct sharpsl_charger_machinfo corgi_pm_machinfo = { ...@@ -214,8 +214,8 @@ static struct sharpsl_charger_machinfo corgi_pm_machinfo = {
.fatal_acin_volt = SHARPSL_FATAL_ACIN_VOLT, .fatal_acin_volt = SHARPSL_FATAL_ACIN_VOLT,
.fatal_noacin_volt= SHARPSL_FATAL_NOACIN_VOLT, .fatal_noacin_volt= SHARPSL_FATAL_NOACIN_VOLT,
.bat_levels = 40, .bat_levels = 40,
.bat_levels_noac = spitz_battery_levels_noac, .bat_levels_noac = sharpsl_battery_levels_noac,
.bat_levels_acin = spitz_battery_levels_acin, .bat_levels_acin = sharpsl_battery_levels_acin,
.status_high_acin = 188, .status_high_acin = 188,
.status_low_acin = 178, .status_low_acin = 178,
.status_high_noac = 185, .status_high_noac = 185,
......
...@@ -268,6 +268,9 @@ static void __init csb726_init(void) ...@@ -268,6 +268,9 @@ static void __init csb726_init(void)
/* MSC2 = 0x06697ff4; *//* none/SM501 */ /* MSC2 = 0x06697ff4; *//* none/SM501 */
MSC2 = (MSC2 & ~0xffff) | 0x7ff4; /* SM501 */ MSC2 = (MSC2 & ~0xffff) | 0x7ff4; /* SM501 */
pxa_set_ffuart_info(NULL);
pxa_set_btuart_info(NULL);
pxa_set_stuart_info(NULL);
pxa_set_i2c_info(NULL); pxa_set_i2c_info(NULL);
pxa27x_set_i2c_power_info(NULL); pxa27x_set_i2c_power_info(NULL);
pxa_set_mci_info(&csb726_mci); pxa_set_mci_info(&csb726_mci);
......
...@@ -4,17 +4,18 @@ ...@@ -4,17 +4,18 @@
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/dma-mapping.h> #include <linux/dma-mapping.h>
#include <mach/hardware.h>
#include <mach/udc.h> #include <mach/udc.h>
#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 <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>
#include <mach/camera.h> #include <mach/camera.h>
#include <mach/audio.h> #include <mach/audio.h>
#include <mach/pxa3xx_nand.h> #include <plat/i2c.h>
#include <plat/pxa3xx_nand.h>
#include "devices.h" #include "devices.h"
#include "generic.h" #include "generic.h"
...@@ -167,13 +168,18 @@ static struct resource pxa_resource_ffuart[] = { ...@@ -167,13 +168,18 @@ static struct resource pxa_resource_ffuart[] = {
} }
}; };
struct platform_device pxa_device_ffuart= { struct platform_device pxa_device_ffuart = {
.name = "pxa2xx-uart", .name = "pxa2xx-uart",
.id = 0, .id = 0,
.resource = pxa_resource_ffuart, .resource = pxa_resource_ffuart,
.num_resources = ARRAY_SIZE(pxa_resource_ffuart), .num_resources = ARRAY_SIZE(pxa_resource_ffuart),
}; };
void __init pxa_set_ffuart_info(void *info)
{
pxa_register_device(&pxa_device_ffuart, info);
}
static struct resource pxa_resource_btuart[] = { static struct resource pxa_resource_btuart[] = {
{ {
.start = 0x40200000, .start = 0x40200000,
...@@ -193,6 +199,11 @@ struct platform_device pxa_device_btuart = { ...@@ -193,6 +199,11 @@ struct platform_device pxa_device_btuart = {
.num_resources = ARRAY_SIZE(pxa_resource_btuart), .num_resources = ARRAY_SIZE(pxa_resource_btuart),
}; };
void __init pxa_set_btuart_info(void *info)
{
pxa_register_device(&pxa_device_btuart, info);
}
static struct resource pxa_resource_stuart[] = { static struct resource pxa_resource_stuart[] = {
{ {
.start = 0x40700000, .start = 0x40700000,
...@@ -212,6 +223,11 @@ struct platform_device pxa_device_stuart = { ...@@ -212,6 +223,11 @@ struct platform_device pxa_device_stuart = {
.num_resources = ARRAY_SIZE(pxa_resource_stuart), .num_resources = ARRAY_SIZE(pxa_resource_stuart),
}; };
void __init pxa_set_stuart_info(void *info)
{
pxa_register_device(&pxa_device_stuart, info);
}
static struct resource pxa_resource_hwuart[] = { static struct resource pxa_resource_hwuart[] = {
{ {
.start = 0x41600000, .start = 0x41600000,
...@@ -231,6 +247,14 @@ struct platform_device pxa_device_hwuart = { ...@@ -231,6 +247,14 @@ struct platform_device pxa_device_hwuart = {
.num_resources = ARRAY_SIZE(pxa_resource_hwuart), .num_resources = ARRAY_SIZE(pxa_resource_hwuart),
}; };
void __init pxa_set_hwuart_info(void *info)
{
if (cpu_is_pxa255())
pxa_register_device(&pxa_device_hwuart, info);
else
pr_info("UART: Ignoring attempt to register HWUART on non-PXA255 hardware");
}
static struct resource pxai2c_resources[] = { static struct resource pxai2c_resources[] = {
{ {
.start = 0x40301680, .start = 0x40301680,
......
...@@ -55,6 +55,9 @@ static struct platform_device *devices[] __initdata = { ...@@ -55,6 +55,9 @@ static struct platform_device *devices[] __initdata = {
static void __init e330_init(void) static void __init e330_init(void)
{ {
pxa_set_ffuart_info(NULL);
pxa_set_btuart_info(NULL);
pxa_set_stuart_info(NULL);
eseries_register_clks(); eseries_register_clks();
eseries_get_tmio_gpios(); eseries_get_tmio_gpios();
platform_add_devices(devices, ARRAY_SIZE(devices)); platform_add_devices(devices, ARRAY_SIZE(devices));
......
...@@ -56,6 +56,9 @@ static struct platform_device *devices[] __initdata = { ...@@ -56,6 +56,9 @@ static struct platform_device *devices[] __initdata = {
static void __init e350_init(void) static void __init e350_init(void)
{ {
pxa_set_ffuart_info(NULL);
pxa_set_btuart_info(NULL);
pxa_set_stuart_info(NULL);
eseries_register_clks(); eseries_register_clks();
eseries_get_tmio_gpios(); eseries_get_tmio_gpios();
platform_add_devices(devices, ARRAY_SIZE(devices)); platform_add_devices(devices, ARRAY_SIZE(devices));
......
...@@ -130,6 +130,9 @@ static struct platform_device *devices[] __initdata = { ...@@ -130,6 +130,9 @@ static struct platform_device *devices[] __initdata = {
static void __init e400_init(void) static void __init e400_init(void)
{ {
pxa2xx_mfp_config(ARRAY_AND_SIZE(e400_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(e400_pin_config));
pxa_set_ffuart_info(NULL);
pxa_set_btuart_info(NULL);
pxa_set_stuart_info(NULL);
/* Fixme - e400 may have a switched clock */ /* Fixme - e400 may have a switched clock */
eseries_register_clks(); eseries_register_clks();
eseries_get_tmio_gpios(); eseries_get_tmio_gpios();
......
...@@ -192,6 +192,9 @@ static struct platform_device *devices[] __initdata = { ...@@ -192,6 +192,9 @@ static struct platform_device *devices[] __initdata = {
static void __init e740_init(void) static void __init e740_init(void)
{ {
pxa2xx_mfp_config(ARRAY_AND_SIZE(e740_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(e740_pin_config));
pxa_set_ffuart_info(NULL);
pxa_set_btuart_info(NULL);
pxa_set_stuart_info(NULL);
eseries_register_clks(); eseries_register_clks();
clk_add_alias("CLK_CK48M", e740_t7l66xb_device.name, clk_add_alias("CLK_CK48M", e740_t7l66xb_device.name,
"UDCCLK", &pxa25x_device_udc.dev), "UDCCLK", &pxa25x_device_udc.dev),
......
...@@ -194,6 +194,9 @@ static struct platform_device *devices[] __initdata = { ...@@ -194,6 +194,9 @@ static struct platform_device *devices[] __initdata = {
static void __init e750_init(void) static void __init e750_init(void)
{ {
pxa2xx_mfp_config(ARRAY_AND_SIZE(e750_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(e750_pin_config));
pxa_set_ffuart_info(NULL);
pxa_set_btuart_info(NULL);
pxa_set_stuart_info(NULL);
clk_add_alias("CLK_CK3P6MI", e750_tc6393xb_device.name, clk_add_alias("CLK_CK3P6MI", e750_tc6393xb_device.name,
"GPIO11_CLK", NULL), "GPIO11_CLK", NULL),
eseries_get_tmio_gpios(); eseries_get_tmio_gpios();
......
...@@ -195,6 +195,9 @@ static struct platform_device *devices[] __initdata = { ...@@ -195,6 +195,9 @@ static struct platform_device *devices[] __initdata = {
static void __init e800_init(void) static void __init e800_init(void)
{ {
pxa_set_ffuart_info(NULL);
pxa_set_btuart_info(NULL);
pxa_set_stuart_info(NULL);
clk_add_alias("CLK_CK3P6MI", e800_tc6393xb_device.name, clk_add_alias("CLK_CK3P6MI", e800_tc6393xb_device.name,
"GPIO11_CLK", NULL), "GPIO11_CLK", NULL),
eseries_get_tmio_gpios(); eseries_get_tmio_gpios();
......
...@@ -967,7 +967,7 @@ static inline void em_x270_init_gpio_keys(void) {} ...@@ -967,7 +967,7 @@ static inline void em_x270_init_gpio_keys(void) {}
#if defined(CONFIG_VIDEO_PXA27x) || defined(CONFIG_VIDEO_PXA27x_MODULE) #if defined(CONFIG_VIDEO_PXA27x) || defined(CONFIG_VIDEO_PXA27x_MODULE)
static struct regulator *em_x270_camera_ldo; static struct regulator *em_x270_camera_ldo;
static int em_x270_sensor_init(struct device *dev) static int em_x270_sensor_init(void)
{ {
int ret; int ret;
...@@ -996,7 +996,6 @@ static int em_x270_sensor_init(struct device *dev) ...@@ -996,7 +996,6 @@ static int em_x270_sensor_init(struct device *dev)
} }
struct pxacamera_platform_data em_x270_camera_platform_data = { struct pxacamera_platform_data em_x270_camera_platform_data = {
.init = em_x270_sensor_init,
.flags = PXA_CAMERA_MASTER | PXA_CAMERA_DATAWIDTH_8 | .flags = PXA_CAMERA_MASTER | PXA_CAMERA_DATAWIDTH_8 |
PXA_CAMERA_PCLK_EN | PXA_CAMERA_MCLK_EN, PXA_CAMERA_PCLK_EN | PXA_CAMERA_MCLK_EN,
.mclk_10khz = 2600, .mclk_10khz = 2600,
...@@ -1049,8 +1048,10 @@ static struct platform_device em_x270_camera = { ...@@ -1049,8 +1048,10 @@ static struct platform_device em_x270_camera = {
static void __init em_x270_init_camera(void) static void __init em_x270_init_camera(void)
{ {
if (em_x270_sensor_init() == 0) {
pxa_set_camera_info(&em_x270_camera_platform_data); pxa_set_camera_info(&em_x270_camera_platform_data);
platform_device_register(&em_x270_camera); platform_device_register(&em_x270_camera);
}
} }
#else #else
static inline void em_x270_init_camera(void) {} static inline void em_x270_init_camera(void) {}
...@@ -1286,6 +1287,10 @@ static void __init em_x270_init(void) ...@@ -1286,6 +1287,10 @@ 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));
pxa_set_ffuart_info(NULL);
pxa_set_btuart_info(NULL);
pxa_set_stuart_info(NULL);
#ifdef CONFIG_PM #ifdef CONFIG_PM
pxa27x_set_pwrmode(PWRMODE_DEEPSLEEP); pxa27x_set_pwrmode(PWRMODE_DEEPSLEEP);
#endif #endif
......
...@@ -17,7 +17,11 @@ ...@@ -17,7 +17,11 @@
#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.h>
#include <linux/gpio_keys.h> #include <linux/gpio_keys.h>
#include <linux/leds-lp3944.h>
#include <media/soc_camera.h>
#include <asm/setup.h> #include <asm/setup.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
...@@ -29,6 +33,7 @@ ...@@ -29,6 +33,7 @@
#include <plat/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 <mach/camera.h>
#include "devices.h" #include "devices.h"
#include "generic.h" #include "generic.h"
...@@ -38,6 +43,9 @@ ...@@ -38,6 +43,9 @@
#define GPIO15_A910_FLIP_LID 15 #define GPIO15_A910_FLIP_LID 15
#define GPIO12_E680_LOCK_SWITCH 12 #define GPIO12_E680_LOCK_SWITCH 12
#define GPIO15_E6_LOCK_SWITCH 15 #define GPIO15_E6_LOCK_SWITCH 15
#define GPIO50_nCAM_EN 50
#define GPIO19_GEN1_CAM_RST 19
#define GPIO28_GEN2_CAM_RST 28
static struct platform_pwm_backlight_data ezx_backlight_data = { static struct platform_pwm_backlight_data ezx_backlight_data = {
.pwm_id = 0, .pwm_id = 0,
...@@ -191,8 +199,8 @@ static unsigned long gen1_pin_config[] __initdata = { ...@@ -191,8 +199,8 @@ static unsigned long gen1_pin_config[] __initdata = {
GPIO94_CIF_DD_5, GPIO94_CIF_DD_5,
GPIO17_CIF_DD_6, GPIO17_CIF_DD_6,
GPIO108_CIF_DD_7, GPIO108_CIF_DD_7,
GPIO50_GPIO, /* CAM_EN */ GPIO50_GPIO | MFP_LPM_DRIVE_HIGH, /* CAM_EN */
GPIO19_GPIO, /* CAM_RST */ GPIO19_GPIO | MFP_LPM_DRIVE_HIGH, /* CAM_RST */
/* EMU */ /* EMU */
GPIO120_GPIO, /* EMU_MUX1 */ GPIO120_GPIO, /* EMU_MUX1 */
...@@ -248,8 +256,8 @@ static unsigned long gen2_pin_config[] __initdata = { ...@@ -248,8 +256,8 @@ static unsigned long gen2_pin_config[] __initdata = {
GPIO48_CIF_DD_5, GPIO48_CIF_DD_5,
GPIO93_CIF_DD_6, GPIO93_CIF_DD_6,
GPIO12_CIF_DD_7, GPIO12_CIF_DD_7,
GPIO50_GPIO, /* CAM_EN */ GPIO50_GPIO | MFP_LPM_DRIVE_HIGH, /* CAM_EN */
GPIO28_GPIO, /* CAM_RST */ GPIO28_GPIO | MFP_LPM_DRIVE_HIGH, /* CAM_RST */
GPIO17_GPIO, /* CAM_FLASH */ GPIO17_GPIO, /* CAM_FLASH */
}; };
#endif #endif
...@@ -683,6 +691,81 @@ static struct platform_device a780_gpio_keys = { ...@@ -683,6 +691,81 @@ static struct platform_device a780_gpio_keys = {
}, },
}; };
/* camera */
static int a780_camera_init(void)
{
int err;
/*
* GPIO50_nCAM_EN is active low
* GPIO19_GEN1_CAM_RST is active on rising edge
*/
err = gpio_request(GPIO50_nCAM_EN, "nCAM_EN");
if (err) {
pr_err("%s: Failed to request nCAM_EN\n", __func__);
goto fail;
}
err = gpio_request(GPIO19_GEN1_CAM_RST, "CAM_RST");
if (err) {
pr_err("%s: Failed to request CAM_RST\n", __func__);
goto fail_gpio_cam_rst;
}
gpio_direction_output(GPIO50_nCAM_EN, 1);
gpio_direction_output(GPIO19_GEN1_CAM_RST, 0);
return 0;
fail_gpio_cam_rst:
gpio_free(GPIO50_nCAM_EN);
fail:
return err;
}
static int a780_camera_power(struct device *dev, int on)
{
gpio_set_value(GPIO50_nCAM_EN, !on);
return 0;
}
static int a780_camera_reset(struct device *dev)
{
gpio_set_value(GPIO19_GEN1_CAM_RST, 0);
msleep(10);
gpio_set_value(GPIO19_GEN1_CAM_RST, 1);
return 0;
}
struct pxacamera_platform_data a780_pxacamera_platform_data = {
.flags = PXA_CAMERA_MASTER | PXA_CAMERA_DATAWIDTH_8 |
PXA_CAMERA_PCLK_EN | PXA_CAMERA_MCLK_EN,
.mclk_10khz = 5000,
};
static struct i2c_board_info a780_camera_i2c_board_info = {
I2C_BOARD_INFO("mt9m111", 0x5d),
};
static struct soc_camera_link a780_iclink = {
.bus_id = 0,
.flags = SOCAM_SENSOR_INVERT_PCLK,
.i2c_adapter_id = 0,
.board_info = &a780_camera_i2c_board_info,
.module_name = "mt9m111",
.power = a780_camera_power,
.reset = a780_camera_reset,
};
static struct platform_device a780_camera = {
.name = "soc-camera-pdrv",
.id = 0,
.dev = {
.platform_data = &a780_iclink,
},
};
static struct platform_device *a780_devices[] __initdata = { static struct platform_device *a780_devices[] __initdata = {
&a780_gpio_keys, &a780_gpio_keys,
}; };
...@@ -693,12 +776,21 @@ static void __init a780_init(void) ...@@ -693,12 +776,21 @@ static void __init a780_init(void)
pxa2xx_mfp_config(ARRAY_AND_SIZE(gen1_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(gen1_pin_config));
pxa2xx_mfp_config(ARRAY_AND_SIZE(a780_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(a780_pin_config));
pxa_set_ffuart_info(NULL);
pxa_set_btuart_info(NULL);
pxa_set_stuart_info(NULL);
pxa_set_i2c_info(NULL); pxa_set_i2c_info(NULL);
set_pxa_fb_info(&ezx_fb_info_1); set_pxa_fb_info(&ezx_fb_info_1);
pxa_set_keypad_info(&a780_keypad_platform_data); pxa_set_keypad_info(&a780_keypad_platform_data);
if (a780_camera_init() == 0) {
pxa_set_camera_info(&a780_pxacamera_platform_data);
platform_device_register(&a780_camera);
}
platform_add_devices(ARRAY_AND_SIZE(ezx_devices)); platform_add_devices(ARRAY_AND_SIZE(ezx_devices));
platform_add_devices(ARRAY_AND_SIZE(a780_devices)); platform_add_devices(ARRAY_AND_SIZE(a780_devices));
} }
...@@ -754,6 +846,10 @@ static void __init e680_init(void) ...@@ -754,6 +846,10 @@ static void __init e680_init(void)
pxa2xx_mfp_config(ARRAY_AND_SIZE(gen1_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(gen1_pin_config));
pxa2xx_mfp_config(ARRAY_AND_SIZE(e680_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(e680_pin_config));
pxa_set_ffuart_info(NULL);
pxa_set_btuart_info(NULL);
pxa_set_stuart_info(NULL);
pxa_set_i2c_info(NULL); pxa_set_i2c_info(NULL);
i2c_register_board_info(0, ARRAY_AND_SIZE(e680_i2c_board_info)); i2c_register_board_info(0, ARRAY_AND_SIZE(e680_i2c_board_info));
...@@ -816,6 +912,10 @@ static void __init a1200_init(void) ...@@ -816,6 +912,10 @@ static void __init a1200_init(void)
pxa2xx_mfp_config(ARRAY_AND_SIZE(gen2_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(gen2_pin_config));
pxa2xx_mfp_config(ARRAY_AND_SIZE(a1200_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(a1200_pin_config));
pxa_set_ffuart_info(NULL);
pxa_set_btuart_info(NULL);
pxa_set_stuart_info(NULL);
pxa_set_i2c_info(NULL); pxa_set_i2c_info(NULL);
i2c_register_board_info(0, ARRAY_AND_SIZE(a1200_i2c_board_info)); i2c_register_board_info(0, ARRAY_AND_SIZE(a1200_i2c_board_info));
...@@ -864,6 +964,131 @@ static struct platform_device a910_gpio_keys = { ...@@ -864,6 +964,131 @@ static struct platform_device a910_gpio_keys = {
}, },
}; };
/* camera */
static int a910_camera_init(void)
{
int err;
/*
* GPIO50_nCAM_EN is active low
* GPIO28_GEN2_CAM_RST is active on rising edge
*/
err = gpio_request(GPIO50_nCAM_EN, "nCAM_EN");
if (err) {
pr_err("%s: Failed to request nCAM_EN\n", __func__);
goto fail;
}
err = gpio_request(GPIO28_GEN2_CAM_RST, "CAM_RST");
if (err) {
pr_err("%s: Failed to request CAM_RST\n", __func__);
goto fail_gpio_cam_rst;
}
gpio_direction_output(GPIO50_nCAM_EN, 1);
gpio_direction_output(GPIO28_GEN2_CAM_RST, 0);
return 0;
fail_gpio_cam_rst:
gpio_free(GPIO50_nCAM_EN);
fail:
return err;
}
static int a910_camera_power(struct device *dev, int on)
{
gpio_set_value(GPIO50_nCAM_EN, !on);
return 0;
}
static int a910_camera_reset(struct device *dev)
{
gpio_set_value(GPIO28_GEN2_CAM_RST, 0);
msleep(10);
gpio_set_value(GPIO28_GEN2_CAM_RST, 1);
return 0;
}
struct pxacamera_platform_data a910_pxacamera_platform_data = {
.flags = PXA_CAMERA_MASTER | PXA_CAMERA_DATAWIDTH_8 |
PXA_CAMERA_PCLK_EN | PXA_CAMERA_MCLK_EN,
.mclk_10khz = 5000,
};
static struct i2c_board_info a910_camera_i2c_board_info = {
I2C_BOARD_INFO("mt9m111", 0x5d),
};
static struct soc_camera_link a910_iclink = {
.bus_id = 0,
.i2c_adapter_id = 0,
.board_info = &a910_camera_i2c_board_info,
.module_name = "mt9m111",
.power = a910_camera_power,
.reset = a910_camera_reset,
};
static struct platform_device a910_camera = {
.name = "soc-camera-pdrv",
.id = 0,
.dev = {
.platform_data = &a910_iclink,
},
};
/* leds-lp3944 */
static struct lp3944_platform_data a910_lp3944_leds = {
.leds_size = LP3944_LEDS_MAX,
.leds = {
[0] = {
.name = "a910:red:",
.status = LP3944_LED_STATUS_OFF,
.type = LP3944_LED_TYPE_LED,
},
[1] = {
.name = "a910:green:",
.status = LP3944_LED_STATUS_OFF,
.type = LP3944_LED_TYPE_LED,
},
[2] {
.name = "a910:blue:",
.status = LP3944_LED_STATUS_OFF,
.type = LP3944_LED_TYPE_LED,
},
/* Leds 3 and 4 are used as display power switches */
[3] = {
.name = "a910::cli_display",
.status = LP3944_LED_STATUS_OFF,
.type = LP3944_LED_TYPE_LED_INVERTED
},
[4] = {
.name = "a910::main_display",
.status = LP3944_LED_STATUS_ON,
.type = LP3944_LED_TYPE_LED_INVERTED
},
[5] = { .type = LP3944_LED_TYPE_NONE },
[6] = {
.name = "a910::torch",
.status = LP3944_LED_STATUS_OFF,
.type = LP3944_LED_TYPE_LED,
},
[7] = {
.name = "a910::flash",
.status = LP3944_LED_STATUS_OFF,
.type = LP3944_LED_TYPE_LED_INVERTED,
},
},
};
static struct i2c_board_info __initdata a910_i2c_board_info[] = {
{
I2C_BOARD_INFO("lp3944", 0x60),
.platform_data = &a910_lp3944_leds,
},
};
static struct platform_device *a910_devices[] __initdata = { static struct platform_device *a910_devices[] __initdata = {
&a910_gpio_keys, &a910_gpio_keys,
}; };
...@@ -874,12 +1099,22 @@ static void __init a910_init(void) ...@@ -874,12 +1099,22 @@ static void __init a910_init(void)
pxa2xx_mfp_config(ARRAY_AND_SIZE(gen2_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(gen2_pin_config));
pxa2xx_mfp_config(ARRAY_AND_SIZE(a910_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(a910_pin_config));
pxa_set_ffuart_info(NULL);
pxa_set_btuart_info(NULL);
pxa_set_stuart_info(NULL);
pxa_set_i2c_info(NULL); pxa_set_i2c_info(NULL);
i2c_register_board_info(0, ARRAY_AND_SIZE(a910_i2c_board_info));
set_pxa_fb_info(&ezx_fb_info_2); set_pxa_fb_info(&ezx_fb_info_2);
pxa_set_keypad_info(&a910_keypad_platform_data); pxa_set_keypad_info(&a910_keypad_platform_data);
if (a910_camera_init() == 0) {
pxa_set_camera_info(&a910_pxacamera_platform_data);
platform_device_register(&a910_camera);
}
platform_add_devices(ARRAY_AND_SIZE(ezx_devices)); platform_add_devices(ARRAY_AND_SIZE(ezx_devices));
platform_add_devices(ARRAY_AND_SIZE(a910_devices)); platform_add_devices(ARRAY_AND_SIZE(a910_devices));
} }
...@@ -935,6 +1170,10 @@ static void __init e6_init(void) ...@@ -935,6 +1170,10 @@ static void __init e6_init(void)
pxa2xx_mfp_config(ARRAY_AND_SIZE(gen2_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(gen2_pin_config));
pxa2xx_mfp_config(ARRAY_AND_SIZE(e6_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(e6_pin_config));
pxa_set_ffuart_info(NULL);
pxa_set_btuart_info(NULL);
pxa_set_stuart_info(NULL);
pxa_set_i2c_info(NULL); pxa_set_i2c_info(NULL);
i2c_register_board_info(0, ARRAY_AND_SIZE(e6_i2c_board_info)); i2c_register_board_info(0, ARRAY_AND_SIZE(e6_i2c_board_info));
...@@ -971,6 +1210,10 @@ static void __init e2_init(void) ...@@ -971,6 +1210,10 @@ static void __init e2_init(void)
pxa2xx_mfp_config(ARRAY_AND_SIZE(gen2_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(gen2_pin_config));
pxa2xx_mfp_config(ARRAY_AND_SIZE(e2_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(e2_pin_config));
pxa_set_ffuart_info(NULL);
pxa_set_btuart_info(NULL);
pxa_set_stuart_info(NULL);
pxa_set_i2c_info(NULL); pxa_set_i2c_info(NULL);
i2c_register_board_info(0, ARRAY_AND_SIZE(e2_i2c_board_info)); i2c_register_board_info(0, ARRAY_AND_SIZE(e2_i2c_board_info));
......
...@@ -67,3 +67,8 @@ extern struct sysdev_class pxa_irq_sysclass; ...@@ -67,3 +67,8 @@ extern struct sysdev_class pxa_irq_sysclass;
extern struct sysdev_class pxa_gpio_sysclass; extern struct sysdev_class pxa_gpio_sysclass;
extern struct sysdev_class pxa2xx_mfp_sysclass; extern struct sysdev_class pxa2xx_mfp_sysclass;
extern struct sysdev_class pxa3xx_mfp_sysclass; extern struct sysdev_class pxa3xx_mfp_sysclass;
void __init pxa_set_ffuart_info(void *info);
void __init pxa_set_btuart_info(void *info);
void __init pxa_set_stuart_info(void *info);
void __init pxa_set_hwuart_info(void *info);
...@@ -211,6 +211,11 @@ static void __init gumstix_init(void) ...@@ -211,6 +211,11 @@ static void __init gumstix_init(void)
{ {
pxa2xx_mfp_config(ARRAY_AND_SIZE(gumstix_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(gumstix_pin_config));
pxa_set_ffuart_info(NULL);
pxa_set_btuart_info(NULL);
pxa_set_stuart_info(NULL);
pxa_set_hwuart_info(NULL);
gumstix_bluetooth_init(); gumstix_bluetooth_init();
gumstix_udc_init(); gumstix_udc_init();
gumstix_mmc_init(); gumstix_mmc_init();
......
...@@ -193,6 +193,9 @@ static void __init h5000_init(void) ...@@ -193,6 +193,9 @@ static void __init h5000_init(void)
fix_msc(); fix_msc();
pxa2xx_mfp_config(ARRAY_AND_SIZE(h5000_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(h5000_pin_config));
pxa_set_ffuart_info(NULL);
pxa_set_btuart_info(NULL);
pxa_set_stuart_info(NULL);
pxa_set_udc_info(&h5000_udc_mach_info); pxa_set_udc_info(&h5000_udc_mach_info);
platform_add_devices(ARRAY_AND_SIZE(devices)); platform_add_devices(ARRAY_AND_SIZE(devices));
} }
......
...@@ -150,6 +150,9 @@ static void __init himalaya_lcd_init(void) ...@@ -150,6 +150,9 @@ static void __init himalaya_lcd_init(void)
static void __init himalaya_init(void) static void __init himalaya_init(void)
{ {
pxa_set_ffuart_info(NULL);
pxa_set_btuart_info(NULL);
pxa_set_stuart_info(NULL);
himalaya_lcd_init(); himalaya_lcd_init();
platform_add_devices(devices, ARRAY_SIZE(devices)); platform_add_devices(devices, ARRAY_SIZE(devices));
} }
......
...@@ -820,6 +820,7 @@ static struct platform_device *devices[] __initdata = { ...@@ -820,6 +820,7 @@ static struct platform_device *devices[] __initdata = {
&gpio_keys, &gpio_keys,
&backlight, &backlight,
&w3220, &w3220,
&hx4700_lcd,
&egpio, &egpio,
&bq24022, &bq24022,
&gpio_vbus, &gpio_vbus,
...@@ -849,6 +850,10 @@ static void __init hx4700_init(void) ...@@ -849,6 +850,10 @@ static void __init hx4700_init(void)
pxa2xx_mfp_config(ARRAY_AND_SIZE(hx4700_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(hx4700_pin_config));
hx4700_gpio_request(ARRAY_AND_SIZE(global_gpios)); hx4700_gpio_request(ARRAY_AND_SIZE(global_gpios));
pxa_set_ffuart_info(NULL);
pxa_set_btuart_info(NULL);
pxa_set_stuart_info(NULL);
platform_add_devices(devices, ARRAY_SIZE(devices)); platform_add_devices(devices, ARRAY_SIZE(devices));
pxa_set_ficp_info(&ficp_info); pxa_set_ficp_info(&ficp_info);
......
...@@ -179,6 +179,9 @@ static void __init idp_init(void) ...@@ -179,6 +179,9 @@ static void __init idp_init(void)
printk("idp_init()\n"); printk("idp_init()\n");
pxa2xx_mfp_config(ARRAY_AND_SIZE(idp_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(idp_pin_config));
pxa_set_ffuart_info(NULL);
pxa_set_btuart_info(NULL);
pxa_set_stuart_info(NULL);
platform_device_register(&smc91x_device); platform_device_register(&smc91x_device);
//platform_device_register(&mst_audio_device); //platform_device_register(&mst_audio_device);
......
...@@ -554,8 +554,12 @@ static struct i2c_pxa_platform_data i2c_pdata = { ...@@ -554,8 +554,12 @@ static struct i2c_pxa_platform_data i2c_pdata = {
static void __init imote2_init(void) static void __init imote2_init(void)
{ {
pxa2xx_mfp_config(ARRAY_AND_SIZE(imote2_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(imote2_pin_config));
pxa_set_ffuart_info(NULL);
pxa_set_btuart_info(NULL);
pxa_set_stuart_info(NULL);
/* 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);
......
...@@ -105,6 +105,7 @@ ...@@ -105,6 +105,7 @@
* *
* PXA935 A0 0x56056931 0x1E653013 * PXA935 A0 0x56056931 0x1E653013
* PXA935 B0 0x56056936 0x6E653013 * PXA935 B0 0x56056936 0x6E653013
* PXA935 B1 0x56056938 0x8E653013
*/ */
#ifdef CONFIG_PXA25x #ifdef CONFIG_PXA25x
#define __cpu_is_pxa210(id) \ #define __cpu_is_pxa210(id) \
...@@ -283,7 +284,7 @@ ...@@ -283,7 +284,7 @@
_id == 0x3; \ _id == 0x3; \
}) })
#define __cpu_is_pxa9xx(id) \ #define __cpu_is_pxa93x(id) \
({ \ ({ \
unsigned int _id = (id) >> 4 & 0xfff; \ unsigned int _id = (id) >> 4 & 0xfff; \
_id == 0x683 || _id == 0x693; \ _id == 0x683 || _id == 0x693; \
...@@ -299,9 +300,9 @@ ...@@ -299,9 +300,9 @@
__cpu_is_pxa3xx(read_cpuid_id()); \ __cpu_is_pxa3xx(read_cpuid_id()); \
}) })
#define cpu_is_pxa9xx() \ #define cpu_is_pxa93x() \
({ \ ({ \
__cpu_is_pxa9xx(read_cpuid_id()); \ __cpu_is_pxa93x(read_cpuid_id()); \
}) })
/* /*
* return current memory and LCD clock frequency in units of 10kHz * return current memory and LCD clock frequency in units of 10kHz
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
...@@ -367,6 +367,7 @@ static int __devinit tdo24m_probe(struct spi_device *spi) ...@@ -367,6 +367,7 @@ static int __devinit tdo24m_probe(struct spi_device *spi)
spi_message_init(m); spi_message_init(m);
x->cs_change = 1;
x->tx_buf = &lcd->buf[0]; x->tx_buf = &lcd->buf[0];
spi_message_add_tail(x, m); spi_message_add_tail(x, m);
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册