* [PATCH 1/2] pxa/colibri270: Add TSC support
@ 2010-05-12 1:35 Marek Vasut
2010-05-12 1:35 ` [PATCH 2/2] pxa/income: Add Income SBC support Marek Vasut
0 siblings, 1 reply; 5+ messages in thread
From: Marek Vasut @ 2010-05-12 1:35 UTC (permalink / raw)
To: linux-arm-kernel
Signed-off-by: Marek Vasut <marek.vasut@gmail.com>
---
arch/arm/mach-pxa/colibri-pxa270.c | 42 ++++++++++++++++++++++++++++++
arch/arm/mach-pxa/include/mach/colibri.h | 1 +
2 files changed, 43 insertions(+), 0 deletions(-)
diff --git a/arch/arm/mach-pxa/colibri-pxa270.c b/arch/arm/mach-pxa/colibri-pxa270.c
index 1cbeb61..6e0d623 100644
--- a/arch/arm/mach-pxa/colibri-pxa270.c
+++ b/arch/arm/mach-pxa/colibri-pxa270.c
@@ -22,6 +22,7 @@
#include <linux/mtd/partitions.h>
#include <linux/mtd/physmap.h>
#include <linux/gpio.h>
+#include <linux/ucb1400.h>
#include <asm/mach-types.h>
#include <mach/hardware.h>
#include <asm/irq.h>
@@ -31,6 +32,7 @@
#include <asm/mach/irq.h>
#include <asm/mach/flash.h>
+#include <mach/audio.h>
#include <mach/pxa27x.h>
#include <mach/colibri.h>
#include <mach/mmc.h>
@@ -66,6 +68,15 @@ static mfp_cfg_t colibri_pxa270_pin_config[] __initdata = {
GPIO89_USBH1_PEN,
GPIO119_USBH2_PWR,
GPIO120_USBH2_PEN,
+
+ /* AC97 */
+ GPIO28_AC97_BITCLK,
+ GPIO29_AC97_SDATA_IN_0,
+ GPIO30_AC97_SDATA_OUT,
+ GPIO31_AC97_SYNC,
+ GPIO95_AC97_nRESET,
+ GPIO98_AC97_SYSCLK,
+ GPIO113_GPIO, /* Touchscreen IRQ */
};
/******************************************************************************
@@ -205,6 +216,36 @@ static void __init colibri_pxa270_uhc_init(void)
static inline void colibri_pxa270_uhc_init(void) {}
#endif
+/******************************************************************************
+ * Audio and Touchscreen
+ ******************************************************************************/
+#if defined(CONFIG_TOUCHSCREEN_UCB1400) || \
+ defined(CONFIG_TOUCHSCREEN_UCB1400_MODULE)
+static pxa2xx_audio_ops_t colibri_pxa270_ac97_pdata = {
+ .reset_gpio = 95,
+};
+
+static struct ucb1400_pdata colibri_pxa270_ucb1400_pdata = {
+ .irq = gpio_to_irq(GPIO113_COLIBRI_PXA270_TS_IRQ),
+};
+
+static struct platform_device colibri_pxa270_ucb1400_device = {
+ .name = "ucb1400_core",
+ .id = -1,
+ .dev = {
+ .platform_data = &colibri_pxa270_ucb1400_pdata,
+ },
+};
+
+static void __init colibri_pxa270_tsc_init(void)
+{
+ pxa_set_ac97_info(&colibri_pxa270_ac97_pdata);
+ platform_device_register(&colibri_pxa270_ucb1400_device);
+}
+#else
+static inline void colibri_pxa270_tsc_init(void) {}
+#endif
+
static void __init colibri_pxa270_init(void)
{
pxa2xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa270_pin_config));
@@ -216,6 +257,7 @@ static void __init colibri_pxa270_init(void)
colibri_pxa270_eth_init();
colibri_pxa270_mmc_init();
colibri_pxa270_uhc_init();
+ colibri_pxa270_tsc_init();
}
MACHINE_START(COLIBRI, "Toradex Colibri PXA270")
diff --git a/arch/arm/mach-pxa/include/mach/colibri.h b/arch/arm/mach-pxa/include/mach/colibri.h
index 08bee63..3471181 100644
--- a/arch/arm/mach-pxa/include/mach/colibri.h
+++ b/arch/arm/mach-pxa/include/mach/colibri.h
@@ -35,6 +35,7 @@ static inline void colibri_pxa3xx_init_nand(void) {}
/* GPIO definitions for Colibri PXA270 */
#define GPIO114_COLIBRI_PXA270_ETH_IRQ 114
#define GPIO0_COLIBRI_PXA270_SD_DETECT 0
+#define GPIO113_COLIBRI_PXA270_TS_IRQ 113
#endif /* _COLIBRI_H_ */
--
1.7.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] pxa/income: Add Income SBC support
2010-05-12 1:35 [PATCH 1/2] pxa/colibri270: Add TSC support Marek Vasut
@ 2010-05-12 1:35 ` Marek Vasut
2010-05-12 7:34 ` Daniel Mack
0 siblings, 1 reply; 5+ messages in thread
From: Marek Vasut @ 2010-05-12 1:35 UTC (permalink / raw)
To: linux-arm-kernel
This is support for custom design based on Toradex Colibri PXA270 CPU card.
Initial patch was by Pavel Revak.
Signed-off-by: Marek Vasut <marek.vasut@gmail.com>
---
MAINTAINERS | 7 +
arch/arm/mach-pxa/Kconfig | 6 +
arch/arm/mach-pxa/Makefile | 1 +
arch/arm/mach-pxa/include/mach/income.h | 25 ++
arch/arm/mach-pxa/income.c | 427 +++++++++++++++++++++++++++++++
5 files changed, 466 insertions(+), 0 deletions(-)
create mode 100644 arch/arm/mach-pxa/include/mach/income.h
create mode 100644 arch/arm/mach-pxa/income.c
diff --git a/MAINTAINERS b/MAINTAINERS
index bed6757..684e337 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -696,6 +696,13 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/kristoffer/linux-hpc.git
F: arch/arm/mach-sa1100/jornada720.c
F: arch/arm/mach-sa1100/include/mach/jornada720.h
+ARM/INCOME PXA270 SUPPORT
+M: Marek Vasut <marek.vasut@gmail.com>
+L: linux-arm-kernel at lists.infradead.org (moderated for non-subscribers)
+S: Maintained
+F: arch/arm/mach-pxa/income.c
+F: arch/arm/mach-pxa/include/mach-pxa/income.h
+
ARM/INTEL IOP32X ARM ARCHITECTURE
M: Lennert Buytenhek <kernel@wantstofly.org>
M: Dan Williams <dan.j.williams@intel.com>
diff --git a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig
index ded9d64..5ab648b 100644
--- a/arch/arm/mach-pxa/Kconfig
+++ b/arch/arm/mach-pxa/Kconfig
@@ -274,6 +274,12 @@ config MACH_HIMALAYA
bool "HTC Himalaya Support"
select CPU_PXA26x
+config MACH_INCOME
+ bool "Income s.r.o. PXA270 SBC"
+ select PXA27x
+ select HAVE_PWM
+ select PXA_HAVE_BOARD_IRQS
+
config MACH_MAGICIAN
bool "Enable HTC Magician Support"
select PXA27x
diff --git a/arch/arm/mach-pxa/Makefile b/arch/arm/mach-pxa/Makefile
index b8f1f4b..52d5c4c 100644
--- a/arch/arm/mach-pxa/Makefile
+++ b/arch/arm/mach-pxa/Makefile
@@ -94,6 +94,7 @@ obj-$(CONFIG_MACH_RAUMFELD_RC) += raumfeld.o
obj-$(CONFIG_MACH_RAUMFELD_CONNECTOR) += raumfeld.o
obj-$(CONFIG_MACH_RAUMFELD_SPEAKER) += raumfeld.o
obj-$(CONFIG_MACH_ZIPIT2) += z2.o
+obj-$(CONFIG_MACH_INCOME) += income.o
# Support for blinky lights
led-y := leds.o
diff --git a/arch/arm/mach-pxa/include/mach/income.h b/arch/arm/mach-pxa/include/mach/income.h
new file mode 100644
index 0000000..5c8d677
--- /dev/null
+++ b/arch/arm/mach-pxa/include/mach/income.h
@@ -0,0 +1,25 @@
+/*
+ * GPIOs and interrupts for Income s.r.o. PXA270 SBC
+ *
+ * Copyright (C) 2010
+ * Marek Vasut <marek.vasut@gmail.com>
+ *
+ * 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 _INCLUDE_INCOME_H_
+#define _INCLUDE_INCOME_H_
+
+/* GPIO definitions for Income s.r.o. PXA270 SBC */
+#define GPIO114_INCOME_ETH_IRQ 114
+#define GPIO0_INCOME_SD_DETECT 0
+#define GPIO0_INCOME_SD_RO 1
+#define GPIO54_INCOME_LED_A 54
+#define GPIO55_INCOME_LED_B 55
+#define GPIO113_INCOME_TS_IRQ 113
+
+#endif /* _INCLUDE_INCOME_H_ */
+
diff --git a/arch/arm/mach-pxa/income.c b/arch/arm/mach-pxa/income.c
new file mode 100644
index 0000000..764ccc5
--- /dev/null
+++ b/arch/arm/mach-pxa/income.c
@@ -0,0 +1,427 @@
+/*
+ * linux/arch/arm/mach-pxa/income.c
+ *
+ * Support for Income s.r.o. SH-Dmaster PXA270 SBC
+ *
+ * Copyright (C) 2010
+ * Marek Vasut <marek.vasut@gmail.com>
+ * Pavel Revak <palo@bielyvlk.sk>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/bitops.h>
+#include <linux/delay.h>
+#include <linux/gpio.h>
+#include <linux/init.h>
+#include <linux/interrupt.h>
+#include <linux/ioport.h>
+#include <linux/kernel.h>
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/partitions.h>
+#include <linux/mtd/physmap.h>
+#include <linux/platform_device.h>
+#include <linux/pwm_backlight.h>
+#include <linux/sysdev.h>
+#include <linux/ucb1400.h>
+#include <asm/irq.h>
+#include <asm/mach/arch.h>
+#include <asm/mach/flash.h>
+#include <asm/mach/irq.h>
+#include <asm/mach/map.h>
+#include <asm/mach-types.h>
+#include <asm/sizes.h>
+
+#include <mach/audio.h>
+#include <mach/hardware.h>
+#include <mach/income.h>
+#include <mach/mmc.h>
+#include <mach/ohci.h>
+#include <mach/pxa27x.h>
+#include <mach/pxa27x-udc.h>
+#include <mach/pxafb.h>
+
+#include <plat/i2c.h>
+
+#include "generic.h"
+#include "devices.h"
+
+/******************************************************************************
+ * Pin configuration
+ ******************************************************************************/
+static mfp_cfg_t income_pin_config[] __initdata = {
+ /* Ethernet */
+ GPIO78_nCS_2, /* Ethernet CS */
+ GPIO114_GPIO, /* Ethernet IRQ */
+
+ /* MMC */
+ GPIO32_MMC_CLK,
+ GPIO92_MMC_DAT_0,
+ GPIO109_MMC_DAT_1,
+ GPIO110_MMC_DAT_2,
+ GPIO111_MMC_DAT_3,
+ GPIO112_MMC_CMD,
+ GPIO0_GPIO, /* SD detect */
+ GPIO1_GPIO, /* SD read-only */
+
+ /* FFUART */
+ GPIO39_FFUART_TXD,
+ GPIO34_FFUART_RXD,
+
+ /* BFUART */
+ GPIO42_BTUART_RXD,
+ GPIO43_BTUART_TXD,
+ GPIO45_BTUART_RTS,
+
+ /* STUART */
+ GPIO46_STUART_RXD,
+ GPIO47_STUART_TXD,
+
+ /* UHC */
+ GPIO88_USBH1_PWR,
+ GPIO89_USBH1_PEN,
+
+ /* LCD */
+ GPIOxx_LCD_TFT_16BPP,
+
+ /* PWM */
+ GPIO16_PWM0_OUT,
+
+ /* I2C */
+ GPIO117_I2C_SCL,
+ GPIO118_I2C_SDA,
+
+ /* LED */
+ GPIO54_GPIO, /* LED A */
+ GPIO55_GPIO, /* LED B */
+
+ /* AC97 */
+ GPIO28_AC97_BITCLK,
+ GPIO29_AC97_SDATA_IN_0,
+ GPIO30_AC97_SDATA_OUT,
+ GPIO31_AC97_SYNC,
+ GPIO95_AC97_nRESET,
+ GPIO98_AC97_SYSCLK,
+ GPIO113_GPIO, /* Touchscreen IRQ */
+};
+
+/******************************************************************************
+ * NOR Flash
+ ******************************************************************************/
+#if defined(CONFIG_MTD_PHYSMAP) || defined(CONFIG_MTD_PHYSMAP_MODULE)
+static struct mtd_partition income_partitions[] = {
+ {
+ .name = "Bootloader",
+ .offset = 0x00000000,
+ .size = 0x00040000,
+ .mask_flags = MTD_WRITEABLE /* force read-only */
+ }, {
+ .name = "Environment",
+ .offset = 0x00040000,
+ .size = 0x00080000,
+ .mask_flags = MTD_WRITEABLE /* force read-only */
+ }, {
+ .name = "Kernel",
+ .offset = 0x00080000,
+ .size = 0x00400000,
+ .mask_flags = 0
+ }, {
+ .name = "Rootfs",
+ .offset = 0x00440000,
+ .size = MTDPART_SIZ_FULL,
+ .mask_flags = 0
+ }
+};
+
+static struct physmap_flash_data income_flash_data[] = {
+ {
+ .width = 4, /* bankwidth in bytes */
+ .parts = income_partitions,
+ .nr_parts = ARRAY_SIZE(income_partitions)
+ }
+};
+
+static struct resource income_flash_resource = {
+ .start = PXA_CS0_PHYS,
+ .end = PXA_CS0_PHYS + SZ_32M - 1,
+ .flags = IORESOURCE_MEM,
+};
+
+static struct platform_device income_flash_device = {
+ .name = "physmap-flash",
+ .id = 0,
+ .dev = {
+ .platform_data = income_flash_data,
+ },
+ .resource = &income_flash_resource,
+ .num_resources = 1,
+};
+
+static void __init income_nor_init(void)
+{
+ platform_device_register(&income_flash);
+}
+#else
+static inline void income_nor_init(void) {}
+#endif
+
+/******************************************************************************
+ * Ethernet
+ ******************************************************************************/
+#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
+static struct resource income_dm9000_resources[] = {
+ [0] = {
+ .start = PXA_CS2_PHYS,
+ .end = PXA_CS2_PHYS + 3,
+ .flags = IORESOURCE_MEM,
+ },
+ [1] = {
+ .start = PXA_CS2_PHYS + 4,
+ .end = PXA_CS2_PHYS + 4 + 500,
+ .flags = IORESOURCE_MEM,
+ },
+ [2] = {
+ .start = gpio_to_irq(GPIO114_INCOME_ETH_IRQ),
+ .end = gpio_to_irq(GPIO114_INCOME_ETH_IRQ),
+ .flags = IORESOURCE_IRQ | IRQF_TRIGGER_RISING,
+ },
+};
+
+static struct platform_device income_dm9000_device = {
+ .name = "dm9000",
+ .id = -1,
+ .num_resources = ARRAY_SIZE(income_dm9000_resources),
+ .resource = income_dm9000_resources,
+};
+
+static void __init income_eth_init(void)
+{
+ platform_device_register(&income_dm9000_device);
+}
+#else
+static inline void income_eth_init(void) {}
+#endif
+
+/******************************************************************************
+ * SD/MMC card controller
+ ******************************************************************************/
+#if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE)
+static struct pxamci_platform_data income_mci_platform_data = {
+ .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
+ .gpio_power = -1,
+ .gpio_card_detect = GPIO0_INCOME_SD_DETECT,
+ .gpio_card_ro = GPIO0_INCOME_SD_RO,
+ .detect_delay_ms = 200,
+};
+
+static void __init income_mmc_init(void)
+{
+ pxa_set_mci_info(&income_mci_platform_data);
+}
+#else
+static inline void income_mmc_init(void) {}
+#endif
+
+/******************************************************************************
+ * USB Host
+ ******************************************************************************/
+#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
+static struct pxaohci_platform_data income_ohci_info = {
+ .port_mode = PMM_PERPORT_MODE,
+ .flags = ENABLE_PORT1 | POWER_CONTROL_LOW | POWER_SENSE_LOW,
+};
+
+static void __init income_uhc_init(void)
+{
+ pxa_set_ohci_info(&income_ohci_info);
+}
+#else
+static inline void income_uhc_init(void) {}
+#endif
+
+/******************************************************************************
+ * LED
+ ******************************************************************************/
+#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
+struct gpio_led income_gpio_leds[] = {
+ {
+ .name = "income:green:leda",
+ .default_trigger = "none",
+ .gpio = GPIO54_INCOME_LED_A,
+ .active_low = 1,
+ },
+ {
+ .name = "income:green:ledb",
+ .default_trigger = "none",
+ .gpio = GPIO55_INCOME_LED_B,
+ .active_low = 1,
+ }
+};
+
+static struct gpio_led_platform_data income_gpio_led_info = {
+ .leds = income_gpio_leds,
+ .num_leds = ARRAY_SIZE(income_gpio_leds),
+};
+
+static struct platform_device income_leds = {
+ .name = "leds-gpio",
+ .id = -1,
+ .dev = {
+ .platform_data = &income_gpio_led_info,
+ }
+};
+
+static void __init income_led_init(void)
+{
+ platform_device_register(&income_leds);
+}
+#else
+static inline void income_led_init(void) {}
+#endif
+
+/******************************************************************************
+ * Audio and Touchscreen
+ ******************************************************************************/
+#if defined(CONFIG_TOUCHSCREEN_UCB1400) || \
+ defined(CONFIG_TOUCHSCREEN_UCB1400_MODULE)
+static pxa2xx_audio_ops_t income_ac97_pdata = {
+ .reset_gpio = 95,
+};
+
+static struct ucb1400_pdata income_ucb1400_pdata = {
+ .irq = gpio_to_irq(GPIO113_INCOME_TS_IRQ),
+};
+
+static struct platform_device income_ucb1400_device = {
+ .name = "ucb1400_core",
+ .id = -1,
+ .dev = {
+ .platform_data = &income_ucb1400_pdata,
+ },
+};
+
+static void __init income_tsc_init(void)
+{
+ pxa_set_ac97_info(&income_ac97_pdata);
+ platform_device_register(&income_ucb1400_device);
+}
+#else
+static inline void income_tsc_init(void) {}
+#endif
+
+/******************************************************************************
+ * I2C
+ ******************************************************************************/
+#if defined(CONFIG_I2C_PXA) || defined(CONFIG_I2C_PXA_MODULE)
+static struct i2c_board_info __initdata income_i2c_devs[] = {
+ {
+ I2C_BOARD_INFO("ds1340", 0x68),
+ }, {
+ I2C_BOARD_INFO("lm75", 0x4f),
+ },
+};
+
+static void __init income_i2c_init(void)
+{
+ pxa_set_i2c_info(NULL);
+ pxa27x_set_i2c_power_info(NULL);
+ i2c_register_board_info(0, ARRAY_AND_SIZE(income_i2c_devs));
+}
+#else
+static inline void income_i2c_init(void) {}
+#endif
+
+/******************************************************************************
+ * Framebuffer
+ ******************************************************************************/
+#if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)
+static struct pxafb_mode_info income_lcd_modes[] = {
+{
+ .pixclock = 144700,
+ .xres = 320,
+ .yres = 240,
+ .bpp = 32,
+ .depth = 18,
+
+ .left_margin = 10,
+ .right_margin = 10,
+ .upper_margin = 7,
+ .lower_margin = 8,
+
+ .hsync_len = 20,
+ .vsync_len = 2,
+
+ .sync = FB_SYNC_VERT_HIGH_ACT,
+},
+};
+
+static struct pxafb_mach_info income_lcd_screen = {
+ .modes = income_lcd_modes,
+ .num_modes = ARRAY_SIZE(income_lcd_modes),
+ .lcd_conn = LCD_COLOR_TFT_18BPP | LCD_PCLK_EDGE_FALL,
+};
+
+static void __init income_lcd_init(void)
+{
+ set_pxa_fb_info(&income_lcd_screen);
+}
+#else
+static inline void income_lcd_init(void) {}
+#endif
+
+/******************************************************************************
+ * Backlight
+ ******************************************************************************/
+#if defined(CONFIG_BACKLIGHT_PWM) || defined(CONFIG_BACKLIGHT_PWM__MODULE)
+static struct platform_pwm_backlight_data income_backlight_data = {
+ .pwm_id = 0,
+ .max_brightness = 0x3ff,
+ .dft_brightness = 0x1ff,
+ .pwm_period_ns = 1000000,
+};
+
+static struct platform_device income_backlight = {
+ .name = "pwm-backlight",
+ .dev = {
+ .parent = &pxa27x_device_pwm0.dev,
+ .platform_data = &income_backlight_data,
+ },
+};
+
+static void __init income_pwm_init(void)
+{
+ platform_device_register(&income_backlight);
+}
+#else
+static inline void income_pwm_init(void) {}
+#endif
+
+static void __init income_init(void)
+{
+ pxa2xx_mfp_config(ARRAY_AND_SIZE(income_pin_config));
+ pxa_set_ffuart_info(NULL);
+ pxa_set_btuart_info(NULL);
+ pxa_set_stuart_info(NULL);
+
+ income_nor_init();
+ income_eth_init();
+ income_mmc_init();
+ income_uhc_init();
+ income_led_init();
+ income_tsc_init();
+ income_i2c_init();
+ income_lcd_init();
+ income_pwm_init();
+}
+
+MACHINE_START(INCOME, "Income s.r.o. SH-Dmaster PXA270 SBC")
+ .phys_io = 0x40000000,
+ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
+ .boot_params = 0xa0000100,
+ .init_machine = income_init,
+ .map_io = pxa_map_io,
+ .init_irq = pxa27x_init_irq,
+ .timer = &pxa_timer,
+MACHINE_END
--
1.7.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] pxa/income: Add Income SBC support
2010-05-12 1:35 ` [PATCH 2/2] pxa/income: Add Income SBC support Marek Vasut
@ 2010-05-12 7:34 ` Daniel Mack
2010-05-13 4:46 ` Marek Vasut
0 siblings, 1 reply; 5+ messages in thread
From: Daniel Mack @ 2010-05-12 7:34 UTC (permalink / raw)
To: linux-arm-kernel
On Wed, May 12, 2010 at 03:35:22AM +0200, Marek Vasut wrote:
> This is support for custom design based on Toradex Colibri PXA270 CPU card.
> Initial patch was by Pavel Revak.
Hmm, so this is exactly what a module/board split would make sense for
now, as this patch duplicates tons of lines from one file to another.
Marek, what do you think - is it worth giving that approach a try?
Daniel
>
> Signed-off-by: Marek Vasut <marek.vasut@gmail.com>
> ---
> MAINTAINERS | 7 +
> arch/arm/mach-pxa/Kconfig | 6 +
> arch/arm/mach-pxa/Makefile | 1 +
> arch/arm/mach-pxa/include/mach/income.h | 25 ++
> arch/arm/mach-pxa/income.c | 427 +++++++++++++++++++++++++++++++
> 5 files changed, 466 insertions(+), 0 deletions(-)
> create mode 100644 arch/arm/mach-pxa/include/mach/income.h
> create mode 100644 arch/arm/mach-pxa/income.c
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index bed6757..684e337 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -696,6 +696,13 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/kristoffer/linux-hpc.git
> F: arch/arm/mach-sa1100/jornada720.c
> F: arch/arm/mach-sa1100/include/mach/jornada720.h
>
> +ARM/INCOME PXA270 SUPPORT
> +M: Marek Vasut <marek.vasut@gmail.com>
> +L: linux-arm-kernel at lists.infradead.org (moderated for non-subscribers)
> +S: Maintained
> +F: arch/arm/mach-pxa/income.c
> +F: arch/arm/mach-pxa/include/mach-pxa/income.h
> +
> ARM/INTEL IOP32X ARM ARCHITECTURE
> M: Lennert Buytenhek <kernel@wantstofly.org>
> M: Dan Williams <dan.j.williams@intel.com>
> diff --git a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig
> index ded9d64..5ab648b 100644
> --- a/arch/arm/mach-pxa/Kconfig
> +++ b/arch/arm/mach-pxa/Kconfig
> @@ -274,6 +274,12 @@ config MACH_HIMALAYA
> bool "HTC Himalaya Support"
> select CPU_PXA26x
>
> +config MACH_INCOME
> + bool "Income s.r.o. PXA270 SBC"
> + select PXA27x
> + select HAVE_PWM
> + select PXA_HAVE_BOARD_IRQS
> +
> config MACH_MAGICIAN
> bool "Enable HTC Magician Support"
> select PXA27x
> diff --git a/arch/arm/mach-pxa/Makefile b/arch/arm/mach-pxa/Makefile
> index b8f1f4b..52d5c4c 100644
> --- a/arch/arm/mach-pxa/Makefile
> +++ b/arch/arm/mach-pxa/Makefile
> @@ -94,6 +94,7 @@ obj-$(CONFIG_MACH_RAUMFELD_RC) += raumfeld.o
> obj-$(CONFIG_MACH_RAUMFELD_CONNECTOR) += raumfeld.o
> obj-$(CONFIG_MACH_RAUMFELD_SPEAKER) += raumfeld.o
> obj-$(CONFIG_MACH_ZIPIT2) += z2.o
> +obj-$(CONFIG_MACH_INCOME) += income.o
>
> # Support for blinky lights
> led-y := leds.o
> diff --git a/arch/arm/mach-pxa/include/mach/income.h b/arch/arm/mach-pxa/include/mach/income.h
> new file mode 100644
> index 0000000..5c8d677
> --- /dev/null
> +++ b/arch/arm/mach-pxa/include/mach/income.h
> @@ -0,0 +1,25 @@
> +/*
> + * GPIOs and interrupts for Income s.r.o. PXA270 SBC
> + *
> + * Copyright (C) 2010
> + * Marek Vasut <marek.vasut@gmail.com>
> + *
> + * 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 _INCLUDE_INCOME_H_
> +#define _INCLUDE_INCOME_H_
> +
> +/* GPIO definitions for Income s.r.o. PXA270 SBC */
> +#define GPIO114_INCOME_ETH_IRQ 114
> +#define GPIO0_INCOME_SD_DETECT 0
> +#define GPIO0_INCOME_SD_RO 1
> +#define GPIO54_INCOME_LED_A 54
> +#define GPIO55_INCOME_LED_B 55
> +#define GPIO113_INCOME_TS_IRQ 113
> +
> +#endif /* _INCLUDE_INCOME_H_ */
> +
> diff --git a/arch/arm/mach-pxa/income.c b/arch/arm/mach-pxa/income.c
> new file mode 100644
> index 0000000..764ccc5
> --- /dev/null
> +++ b/arch/arm/mach-pxa/income.c
> @@ -0,0 +1,427 @@
> +/*
> + * linux/arch/arm/mach-pxa/income.c
> + *
> + * Support for Income s.r.o. SH-Dmaster PXA270 SBC
> + *
> + * Copyright (C) 2010
> + * Marek Vasut <marek.vasut@gmail.com>
> + * Pavel Revak <palo@bielyvlk.sk>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + */
> +
> +#include <linux/bitops.h>
> +#include <linux/delay.h>
> +#include <linux/gpio.h>
> +#include <linux/init.h>
> +#include <linux/interrupt.h>
> +#include <linux/ioport.h>
> +#include <linux/kernel.h>
> +#include <linux/mtd/mtd.h>
> +#include <linux/mtd/partitions.h>
> +#include <linux/mtd/physmap.h>
> +#include <linux/platform_device.h>
> +#include <linux/pwm_backlight.h>
> +#include <linux/sysdev.h>
> +#include <linux/ucb1400.h>
> +#include <asm/irq.h>
> +#include <asm/mach/arch.h>
> +#include <asm/mach/flash.h>
> +#include <asm/mach/irq.h>
> +#include <asm/mach/map.h>
> +#include <asm/mach-types.h>
> +#include <asm/sizes.h>
> +
> +#include <mach/audio.h>
> +#include <mach/hardware.h>
> +#include <mach/income.h>
> +#include <mach/mmc.h>
> +#include <mach/ohci.h>
> +#include <mach/pxa27x.h>
> +#include <mach/pxa27x-udc.h>
> +#include <mach/pxafb.h>
> +
> +#include <plat/i2c.h>
> +
> +#include "generic.h"
> +#include "devices.h"
> +
> +/******************************************************************************
> + * Pin configuration
> + ******************************************************************************/
> +static mfp_cfg_t income_pin_config[] __initdata = {
> + /* Ethernet */
> + GPIO78_nCS_2, /* Ethernet CS */
> + GPIO114_GPIO, /* Ethernet IRQ */
> +
> + /* MMC */
> + GPIO32_MMC_CLK,
> + GPIO92_MMC_DAT_0,
> + GPIO109_MMC_DAT_1,
> + GPIO110_MMC_DAT_2,
> + GPIO111_MMC_DAT_3,
> + GPIO112_MMC_CMD,
> + GPIO0_GPIO, /* SD detect */
> + GPIO1_GPIO, /* SD read-only */
> +
> + /* FFUART */
> + GPIO39_FFUART_TXD,
> + GPIO34_FFUART_RXD,
> +
> + /* BFUART */
> + GPIO42_BTUART_RXD,
> + GPIO43_BTUART_TXD,
> + GPIO45_BTUART_RTS,
> +
> + /* STUART */
> + GPIO46_STUART_RXD,
> + GPIO47_STUART_TXD,
> +
> + /* UHC */
> + GPIO88_USBH1_PWR,
> + GPIO89_USBH1_PEN,
> +
> + /* LCD */
> + GPIOxx_LCD_TFT_16BPP,
> +
> + /* PWM */
> + GPIO16_PWM0_OUT,
> +
> + /* I2C */
> + GPIO117_I2C_SCL,
> + GPIO118_I2C_SDA,
> +
> + /* LED */
> + GPIO54_GPIO, /* LED A */
> + GPIO55_GPIO, /* LED B */
> +
> + /* AC97 */
> + GPIO28_AC97_BITCLK,
> + GPIO29_AC97_SDATA_IN_0,
> + GPIO30_AC97_SDATA_OUT,
> + GPIO31_AC97_SYNC,
> + GPIO95_AC97_nRESET,
> + GPIO98_AC97_SYSCLK,
> + GPIO113_GPIO, /* Touchscreen IRQ */
> +};
> +
> +/******************************************************************************
> + * NOR Flash
> + ******************************************************************************/
> +#if defined(CONFIG_MTD_PHYSMAP) || defined(CONFIG_MTD_PHYSMAP_MODULE)
> +static struct mtd_partition income_partitions[] = {
> + {
> + .name = "Bootloader",
> + .offset = 0x00000000,
> + .size = 0x00040000,
> + .mask_flags = MTD_WRITEABLE /* force read-only */
> + }, {
> + .name = "Environment",
> + .offset = 0x00040000,
> + .size = 0x00080000,
> + .mask_flags = MTD_WRITEABLE /* force read-only */
> + }, {
> + .name = "Kernel",
> + .offset = 0x00080000,
> + .size = 0x00400000,
> + .mask_flags = 0
> + }, {
> + .name = "Rootfs",
> + .offset = 0x00440000,
> + .size = MTDPART_SIZ_FULL,
> + .mask_flags = 0
> + }
> +};
> +
> +static struct physmap_flash_data income_flash_data[] = {
> + {
> + .width = 4, /* bankwidth in bytes */
> + .parts = income_partitions,
> + .nr_parts = ARRAY_SIZE(income_partitions)
> + }
> +};
> +
> +static struct resource income_flash_resource = {
> + .start = PXA_CS0_PHYS,
> + .end = PXA_CS0_PHYS + SZ_32M - 1,
> + .flags = IORESOURCE_MEM,
> +};
> +
> +static struct platform_device income_flash_device = {
> + .name = "physmap-flash",
> + .id = 0,
> + .dev = {
> + .platform_data = income_flash_data,
> + },
> + .resource = &income_flash_resource,
> + .num_resources = 1,
> +};
> +
> +static void __init income_nor_init(void)
> +{
> + platform_device_register(&income_flash);
> +}
> +#else
> +static inline void income_nor_init(void) {}
> +#endif
> +
> +/******************************************************************************
> + * Ethernet
> + ******************************************************************************/
> +#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
> +static struct resource income_dm9000_resources[] = {
> + [0] = {
> + .start = PXA_CS2_PHYS,
> + .end = PXA_CS2_PHYS + 3,
> + .flags = IORESOURCE_MEM,
> + },
> + [1] = {
> + .start = PXA_CS2_PHYS + 4,
> + .end = PXA_CS2_PHYS + 4 + 500,
> + .flags = IORESOURCE_MEM,
> + },
> + [2] = {
> + .start = gpio_to_irq(GPIO114_INCOME_ETH_IRQ),
> + .end = gpio_to_irq(GPIO114_INCOME_ETH_IRQ),
> + .flags = IORESOURCE_IRQ | IRQF_TRIGGER_RISING,
> + },
> +};
> +
> +static struct platform_device income_dm9000_device = {
> + .name = "dm9000",
> + .id = -1,
> + .num_resources = ARRAY_SIZE(income_dm9000_resources),
> + .resource = income_dm9000_resources,
> +};
> +
> +static void __init income_eth_init(void)
> +{
> + platform_device_register(&income_dm9000_device);
> +}
> +#else
> +static inline void income_eth_init(void) {}
> +#endif
> +
> +/******************************************************************************
> + * SD/MMC card controller
> + ******************************************************************************/
> +#if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE)
> +static struct pxamci_platform_data income_mci_platform_data = {
> + .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
> + .gpio_power = -1,
> + .gpio_card_detect = GPIO0_INCOME_SD_DETECT,
> + .gpio_card_ro = GPIO0_INCOME_SD_RO,
> + .detect_delay_ms = 200,
> +};
> +
> +static void __init income_mmc_init(void)
> +{
> + pxa_set_mci_info(&income_mci_platform_data);
> +}
> +#else
> +static inline void income_mmc_init(void) {}
> +#endif
> +
> +/******************************************************************************
> + * USB Host
> + ******************************************************************************/
> +#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
> +static struct pxaohci_platform_data income_ohci_info = {
> + .port_mode = PMM_PERPORT_MODE,
> + .flags = ENABLE_PORT1 | POWER_CONTROL_LOW | POWER_SENSE_LOW,
> +};
> +
> +static void __init income_uhc_init(void)
> +{
> + pxa_set_ohci_info(&income_ohci_info);
> +}
> +#else
> +static inline void income_uhc_init(void) {}
> +#endif
> +
> +/******************************************************************************
> + * LED
> + ******************************************************************************/
> +#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
> +struct gpio_led income_gpio_leds[] = {
> + {
> + .name = "income:green:leda",
> + .default_trigger = "none",
> + .gpio = GPIO54_INCOME_LED_A,
> + .active_low = 1,
> + },
> + {
> + .name = "income:green:ledb",
> + .default_trigger = "none",
> + .gpio = GPIO55_INCOME_LED_B,
> + .active_low = 1,
> + }
> +};
> +
> +static struct gpio_led_platform_data income_gpio_led_info = {
> + .leds = income_gpio_leds,
> + .num_leds = ARRAY_SIZE(income_gpio_leds),
> +};
> +
> +static struct platform_device income_leds = {
> + .name = "leds-gpio",
> + .id = -1,
> + .dev = {
> + .platform_data = &income_gpio_led_info,
> + }
> +};
> +
> +static void __init income_led_init(void)
> +{
> + platform_device_register(&income_leds);
> +}
> +#else
> +static inline void income_led_init(void) {}
> +#endif
> +
> +/******************************************************************************
> + * Audio and Touchscreen
> + ******************************************************************************/
> +#if defined(CONFIG_TOUCHSCREEN_UCB1400) || \
> + defined(CONFIG_TOUCHSCREEN_UCB1400_MODULE)
> +static pxa2xx_audio_ops_t income_ac97_pdata = {
> + .reset_gpio = 95,
> +};
> +
> +static struct ucb1400_pdata income_ucb1400_pdata = {
> + .irq = gpio_to_irq(GPIO113_INCOME_TS_IRQ),
> +};
> +
> +static struct platform_device income_ucb1400_device = {
> + .name = "ucb1400_core",
> + .id = -1,
> + .dev = {
> + .platform_data = &income_ucb1400_pdata,
> + },
> +};
> +
> +static void __init income_tsc_init(void)
> +{
> + pxa_set_ac97_info(&income_ac97_pdata);
> + platform_device_register(&income_ucb1400_device);
> +}
> +#else
> +static inline void income_tsc_init(void) {}
> +#endif
> +
> +/******************************************************************************
> + * I2C
> + ******************************************************************************/
> +#if defined(CONFIG_I2C_PXA) || defined(CONFIG_I2C_PXA_MODULE)
> +static struct i2c_board_info __initdata income_i2c_devs[] = {
> + {
> + I2C_BOARD_INFO("ds1340", 0x68),
> + }, {
> + I2C_BOARD_INFO("lm75", 0x4f),
> + },
> +};
> +
> +static void __init income_i2c_init(void)
> +{
> + pxa_set_i2c_info(NULL);
> + pxa27x_set_i2c_power_info(NULL);
> + i2c_register_board_info(0, ARRAY_AND_SIZE(income_i2c_devs));
> +}
> +#else
> +static inline void income_i2c_init(void) {}
> +#endif
> +
> +/******************************************************************************
> + * Framebuffer
> + ******************************************************************************/
> +#if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)
> +static struct pxafb_mode_info income_lcd_modes[] = {
> +{
> + .pixclock = 144700,
> + .xres = 320,
> + .yres = 240,
> + .bpp = 32,
> + .depth = 18,
> +
> + .left_margin = 10,
> + .right_margin = 10,
> + .upper_margin = 7,
> + .lower_margin = 8,
> +
> + .hsync_len = 20,
> + .vsync_len = 2,
> +
> + .sync = FB_SYNC_VERT_HIGH_ACT,
> +},
> +};
> +
> +static struct pxafb_mach_info income_lcd_screen = {
> + .modes = income_lcd_modes,
> + .num_modes = ARRAY_SIZE(income_lcd_modes),
> + .lcd_conn = LCD_COLOR_TFT_18BPP | LCD_PCLK_EDGE_FALL,
> +};
> +
> +static void __init income_lcd_init(void)
> +{
> + set_pxa_fb_info(&income_lcd_screen);
> +}
> +#else
> +static inline void income_lcd_init(void) {}
> +#endif
> +
> +/******************************************************************************
> + * Backlight
> + ******************************************************************************/
> +#if defined(CONFIG_BACKLIGHT_PWM) || defined(CONFIG_BACKLIGHT_PWM__MODULE)
> +static struct platform_pwm_backlight_data income_backlight_data = {
> + .pwm_id = 0,
> + .max_brightness = 0x3ff,
> + .dft_brightness = 0x1ff,
> + .pwm_period_ns = 1000000,
> +};
> +
> +static struct platform_device income_backlight = {
> + .name = "pwm-backlight",
> + .dev = {
> + .parent = &pxa27x_device_pwm0.dev,
> + .platform_data = &income_backlight_data,
> + },
> +};
> +
> +static void __init income_pwm_init(void)
> +{
> + platform_device_register(&income_backlight);
> +}
> +#else
> +static inline void income_pwm_init(void) {}
> +#endif
> +
> +static void __init income_init(void)
> +{
> + pxa2xx_mfp_config(ARRAY_AND_SIZE(income_pin_config));
> + pxa_set_ffuart_info(NULL);
> + pxa_set_btuart_info(NULL);
> + pxa_set_stuart_info(NULL);
> +
> + income_nor_init();
> + income_eth_init();
> + income_mmc_init();
> + income_uhc_init();
> + income_led_init();
> + income_tsc_init();
> + income_i2c_init();
> + income_lcd_init();
> + income_pwm_init();
> +}
> +
> +MACHINE_START(INCOME, "Income s.r.o. SH-Dmaster PXA270 SBC")
> + .phys_io = 0x40000000,
> + .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
> + .boot_params = 0xa0000100,
> + .init_machine = income_init,
> + .map_io = pxa_map_io,
> + .init_irq = pxa27x_init_irq,
> + .timer = &pxa_timer,
> +MACHINE_END
> --
> 1.7.0
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 2/2] pxa/income: Add Income SBC support
2010-05-12 7:34 ` Daniel Mack
@ 2010-05-13 4:46 ` Marek Vasut
2010-05-13 9:35 ` Daniel Mack
0 siblings, 1 reply; 5+ messages in thread
From: Marek Vasut @ 2010-05-13 4:46 UTC (permalink / raw)
To: linux-arm-kernel
Dne St 12. kv?tna 2010 09:34:20 Daniel Mack napsal(a):
> On Wed, May 12, 2010 at 03:35:22AM +0200, Marek Vasut wrote:
> > This is support for custom design based on Toradex Colibri PXA270 CPU
> > card. Initial patch was by Pavel Revak.
>
> Hmm, so this is exactly what a module/board split would make sense for
> now, as this patch duplicates tons of lines from one file to another.
>
> Marek, what do you think - is it worth giving that approach a try?
I replied from the cellphone,but it probably didn't arrive. Anyway, I'm all for
it. Should be do it after or before this goes in ?
>
> Daniel
>
> > Signed-off-by: Marek Vasut <marek.vasut@gmail.com>
> > ---
> >
> > MAINTAINERS | 7 +
> > arch/arm/mach-pxa/Kconfig | 6 +
> > arch/arm/mach-pxa/Makefile | 1 +
> > arch/arm/mach-pxa/include/mach/income.h | 25 ++
> > arch/arm/mach-pxa/income.c | 427
> > +++++++++++++++++++++++++++++++ 5 files changed, 466 insertions(+), 0
> > deletions(-)
> > create mode 100644 arch/arm/mach-pxa/include/mach/income.h
> > create mode 100644 arch/arm/mach-pxa/income.c
> >
> > diff --git a/MAINTAINERS b/MAINTAINERS
> > index bed6757..684e337 100644
> > --- a/MAINTAINERS
> > +++ b/MAINTAINERS
> > @@ -696,6 +696,13 @@ T: git
> > git://git.kernel.org/pub/scm/linux/kernel/git/kristoffer/linux-hpc.git
> >
> > F: arch/arm/mach-sa1100/jornada720.c
> > F: arch/arm/mach-sa1100/include/mach/jornada720.h
> >
> > +ARM/INCOME PXA270 SUPPORT
> > +M: Marek Vasut <marek.vasut@gmail.com>
> > +L: linux-arm-kernel at lists.infradead.org (moderated for non-subscribers)
> > +S: Maintained
> > +F: arch/arm/mach-pxa/income.c
> > +F: arch/arm/mach-pxa/include/mach-pxa/income.h
> > +
> >
> > ARM/INTEL IOP32X ARM ARCHITECTURE
> > M: Lennert Buytenhek <kernel@wantstofly.org>
> > M: Dan Williams <dan.j.williams@intel.com>
> >
> > diff --git a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig
> > index ded9d64..5ab648b 100644
> > --- a/arch/arm/mach-pxa/Kconfig
> > +++ b/arch/arm/mach-pxa/Kconfig
> > @@ -274,6 +274,12 @@ config MACH_HIMALAYA
> >
> > bool "HTC Himalaya Support"
> > select CPU_PXA26x
> >
> > +config MACH_INCOME
> > + bool "Income s.r.o. PXA270 SBC"
> > + select PXA27x
> > + select HAVE_PWM
> > + select PXA_HAVE_BOARD_IRQS
> > +
> >
> > config MACH_MAGICIAN
> >
> > bool "Enable HTC Magician Support"
> > select PXA27x
> >
> > diff --git a/arch/arm/mach-pxa/Makefile b/arch/arm/mach-pxa/Makefile
> > index b8f1f4b..52d5c4c 100644
> > --- a/arch/arm/mach-pxa/Makefile
> > +++ b/arch/arm/mach-pxa/Makefile
> > @@ -94,6 +94,7 @@ obj-$(CONFIG_MACH_RAUMFELD_RC) += raumfeld.o
> >
> > obj-$(CONFIG_MACH_RAUMFELD_CONNECTOR) += raumfeld.o
> > obj-$(CONFIG_MACH_RAUMFELD_SPEAKER) += raumfeld.o
> > obj-$(CONFIG_MACH_ZIPIT2) += z2.o
> >
> > +obj-$(CONFIG_MACH_INCOME) += income.o
> >
> > # Support for blinky lights
> > led-y := leds.o
> >
> > diff --git a/arch/arm/mach-pxa/include/mach/income.h
> > b/arch/arm/mach-pxa/include/mach/income.h new file mode 100644
> > index 0000000..5c8d677
> > --- /dev/null
> > +++ b/arch/arm/mach-pxa/include/mach/income.h
> > @@ -0,0 +1,25 @@
> > +/*
> > + * GPIOs and interrupts for Income s.r.o. PXA270 SBC
> > + *
> > + * Copyright (C) 2010
> > + * Marek Vasut <marek.vasut@gmail.com>
> > + *
> > + * 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 _INCLUDE_INCOME_H_
> > +#define _INCLUDE_INCOME_H_
> > +
> > +/* GPIO definitions for Income s.r.o. PXA270 SBC */
> > +#define GPIO114_INCOME_ETH_IRQ 114
> > +#define GPIO0_INCOME_SD_DETECT 0
> > +#define GPIO0_INCOME_SD_RO 1
> > +#define GPIO54_INCOME_LED_A 54
> > +#define GPIO55_INCOME_LED_B 55
> > +#define GPIO113_INCOME_TS_IRQ 113
> > +
> > +#endif /* _INCLUDE_INCOME_H_ */
> > +
> > diff --git a/arch/arm/mach-pxa/income.c b/arch/arm/mach-pxa/income.c
> > new file mode 100644
> > index 0000000..764ccc5
> > --- /dev/null
> > +++ b/arch/arm/mach-pxa/income.c
> > @@ -0,0 +1,427 @@
> > +/*
> > + * linux/arch/arm/mach-pxa/income.c
> > + *
> > + * Support for Income s.r.o. SH-Dmaster PXA270 SBC
> > + *
> > + * Copyright (C) 2010
> > + * Marek Vasut <marek.vasut@gmail.com>
> > + * Pavel Revak <palo@bielyvlk.sk>
> > + *
> > + * This program is free software; you can redistribute it and/or modify
> > + * it under the terms of the GNU General Public License version 2 as
> > + * published by the Free Software Foundation.
> > + */
> > +
> > +#include <linux/bitops.h>
> > +#include <linux/delay.h>
> > +#include <linux/gpio.h>
> > +#include <linux/init.h>
> > +#include <linux/interrupt.h>
> > +#include <linux/ioport.h>
> > +#include <linux/kernel.h>
> > +#include <linux/mtd/mtd.h>
> > +#include <linux/mtd/partitions.h>
> > +#include <linux/mtd/physmap.h>
> > +#include <linux/platform_device.h>
> > +#include <linux/pwm_backlight.h>
> > +#include <linux/sysdev.h>
> > +#include <linux/ucb1400.h>
> > +#include <asm/irq.h>
> > +#include <asm/mach/arch.h>
> > +#include <asm/mach/flash.h>
> > +#include <asm/mach/irq.h>
> > +#include <asm/mach/map.h>
> > +#include <asm/mach-types.h>
> > +#include <asm/sizes.h>
> > +
> > +#include <mach/audio.h>
> > +#include <mach/hardware.h>
> > +#include <mach/income.h>
> > +#include <mach/mmc.h>
> > +#include <mach/ohci.h>
> > +#include <mach/pxa27x.h>
> > +#include <mach/pxa27x-udc.h>
> > +#include <mach/pxafb.h>
> > +
> > +#include <plat/i2c.h>
> > +
> > +#include "generic.h"
> > +#include "devices.h"
> > +
> > +/***********************************************************************
> > ******* + * Pin configuration
> > +
> > ************************************************************************
> > ******/ +static mfp_cfg_t income_pin_config[] __initdata = {
> > + /* Ethernet */
> > + GPIO78_nCS_2, /* Ethernet CS */
> > + GPIO114_GPIO, /* Ethernet IRQ */
> > +
> > + /* MMC */
> > + GPIO32_MMC_CLK,
> > + GPIO92_MMC_DAT_0,
> > + GPIO109_MMC_DAT_1,
> > + GPIO110_MMC_DAT_2,
> > + GPIO111_MMC_DAT_3,
> > + GPIO112_MMC_CMD,
> > + GPIO0_GPIO, /* SD detect */
> > + GPIO1_GPIO, /* SD read-only */
> > +
> > + /* FFUART */
> > + GPIO39_FFUART_TXD,
> > + GPIO34_FFUART_RXD,
> > +
> > + /* BFUART */
> > + GPIO42_BTUART_RXD,
> > + GPIO43_BTUART_TXD,
> > + GPIO45_BTUART_RTS,
> > +
> > + /* STUART */
> > + GPIO46_STUART_RXD,
> > + GPIO47_STUART_TXD,
> > +
> > + /* UHC */
> > + GPIO88_USBH1_PWR,
> > + GPIO89_USBH1_PEN,
> > +
> > + /* LCD */
> > + GPIOxx_LCD_TFT_16BPP,
> > +
> > + /* PWM */
> > + GPIO16_PWM0_OUT,
> > +
> > + /* I2C */
> > + GPIO117_I2C_SCL,
> > + GPIO118_I2C_SDA,
> > +
> > + /* LED */
> > + GPIO54_GPIO, /* LED A */
> > + GPIO55_GPIO, /* LED B */
> > +
> > + /* AC97 */
> > + GPIO28_AC97_BITCLK,
> > + GPIO29_AC97_SDATA_IN_0,
> > + GPIO30_AC97_SDATA_OUT,
> > + GPIO31_AC97_SYNC,
> > + GPIO95_AC97_nRESET,
> > + GPIO98_AC97_SYSCLK,
> > + GPIO113_GPIO, /* Touchscreen IRQ */
> > +};
> > +
> > +/***********************************************************************
> > ******* + * NOR Flash
> > +
> > ************************************************************************
> > ******/ +#if defined(CONFIG_MTD_PHYSMAP) ||
> > defined(CONFIG_MTD_PHYSMAP_MODULE) +static struct mtd_partition
> > income_partitions[] = {
> > + {
> > + .name = "Bootloader",
> > + .offset = 0x00000000,
> > + .size = 0x00040000,
> > + .mask_flags = MTD_WRITEABLE /* force read-only */
> > + }, {
> > + .name = "Environment",
> > + .offset = 0x00040000,
> > + .size = 0x00080000,
> > + .mask_flags = MTD_WRITEABLE /* force read-only */
> > + }, {
> > + .name = "Kernel",
> > + .offset = 0x00080000,
> > + .size = 0x00400000,
> > + .mask_flags = 0
> > + }, {
> > + .name = "Rootfs",
> > + .offset = 0x00440000,
> > + .size = MTDPART_SIZ_FULL,
> > + .mask_flags = 0
> > + }
> > +};
> > +
> > +static struct physmap_flash_data income_flash_data[] = {
> > + {
> > + .width = 4, /* bankwidth in bytes */
> > + .parts = income_partitions,
> > + .nr_parts = ARRAY_SIZE(income_partitions)
> > + }
> > +};
> > +
> > +static struct resource income_flash_resource = {
> > + .start = PXA_CS0_PHYS,
> > + .end = PXA_CS0_PHYS + SZ_32M - 1,
> > + .flags = IORESOURCE_MEM,
> > +};
> > +
> > +static struct platform_device income_flash_device = {
> > + .name = "physmap-flash",
> > + .id = 0,
> > + .dev = {
> > + .platform_data = income_flash_data,
> > + },
> > + .resource = &income_flash_resource,
> > + .num_resources = 1,
> > +};
> > +
> > +static void __init income_nor_init(void)
> > +{
> > + platform_device_register(&income_flash);
> > +}
> > +#else
> > +static inline void income_nor_init(void) {}
> > +#endif
> > +
> > +/***********************************************************************
> > ******* + * Ethernet
> > +
> > ************************************************************************
> > ******/ +#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
> > +static struct resource income_dm9000_resources[] = {
> > + [0] = {
> > + .start = PXA_CS2_PHYS,
> > + .end = PXA_CS2_PHYS + 3,
> > + .flags = IORESOURCE_MEM,
> > + },
> > + [1] = {
> > + .start = PXA_CS2_PHYS + 4,
> > + .end = PXA_CS2_PHYS + 4 + 500,
> > + .flags = IORESOURCE_MEM,
> > + },
> > + [2] = {
> > + .start = gpio_to_irq(GPIO114_INCOME_ETH_IRQ),
> > + .end = gpio_to_irq(GPIO114_INCOME_ETH_IRQ),
> > + .flags = IORESOURCE_IRQ | IRQF_TRIGGER_RISING,
> > + },
> > +};
> > +
> > +static struct platform_device income_dm9000_device = {
> > + .name = "dm9000",
> > + .id = -1,
> > + .num_resources = ARRAY_SIZE(income_dm9000_resources),
> > + .resource = income_dm9000_resources,
> > +};
> > +
> > +static void __init income_eth_init(void)
> > +{
> > + platform_device_register(&income_dm9000_device);
> > +}
> > +#else
> > +static inline void income_eth_init(void) {}
> > +#endif
> > +
> > +/***********************************************************************
> > ******* + * SD/MMC card controller
> > +
> > ************************************************************************
> > ******/ +#if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE)
> > +static struct pxamci_platform_data income_mci_platform_data = {
> > + .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
> > + .gpio_power = -1,
> > + .gpio_card_detect = GPIO0_INCOME_SD_DETECT,
> > + .gpio_card_ro = GPIO0_INCOME_SD_RO,
> > + .detect_delay_ms = 200,
> > +};
> > +
> > +static void __init income_mmc_init(void)
> > +{
> > + pxa_set_mci_info(&income_mci_platform_data);
> > +}
> > +#else
> > +static inline void income_mmc_init(void) {}
> > +#endif
> > +
> > +/***********************************************************************
> > ******* + * USB Host
> > +
> > ************************************************************************
> > ******/ +#if defined(CONFIG_USB_OHCI_HCD) ||
> > defined(CONFIG_USB_OHCI_HCD_MODULE) +static struct pxaohci_platform_data
> > income_ohci_info = {
> > + .port_mode = PMM_PERPORT_MODE,
> > + .flags = ENABLE_PORT1 | POWER_CONTROL_LOW | POWER_SENSE_LOW,
> > +};
> > +
> > +static void __init income_uhc_init(void)
> > +{
> > + pxa_set_ohci_info(&income_ohci_info);
> > +}
> > +#else
> > +static inline void income_uhc_init(void) {}
> > +#endif
> > +
> > +/***********************************************************************
> > ******* + * LED
> > +
> > ************************************************************************
> > ******/ +#if defined(CONFIG_LEDS_GPIO) ||
> > defined(CONFIG_LEDS_GPIO_MODULE) +struct gpio_led income_gpio_leds[] = {
> > + {
> > + .name = "income:green:leda",
> > + .default_trigger = "none",
> > + .gpio = GPIO54_INCOME_LED_A,
> > + .active_low = 1,
> > + },
> > + {
> > + .name = "income:green:ledb",
> > + .default_trigger = "none",
> > + .gpio = GPIO55_INCOME_LED_B,
> > + .active_low = 1,
> > + }
> > +};
> > +
> > +static struct gpio_led_platform_data income_gpio_led_info = {
> > + .leds = income_gpio_leds,
> > + .num_leds = ARRAY_SIZE(income_gpio_leds),
> > +};
> > +
> > +static struct platform_device income_leds = {
> > + .name = "leds-gpio",
> > + .id = -1,
> > + .dev = {
> > + .platform_data = &income_gpio_led_info,
> > + }
> > +};
> > +
> > +static void __init income_led_init(void)
> > +{
> > + platform_device_register(&income_leds);
> > +}
> > +#else
> > +static inline void income_led_init(void) {}
> > +#endif
> > +
> > +/***********************************************************************
> > ******* + * Audio and Touchscreen
> > +
> > ************************************************************************
> > ******/ +#if defined(CONFIG_TOUCHSCREEN_UCB1400) || \
> > + defined(CONFIG_TOUCHSCREEN_UCB1400_MODULE)
> > +static pxa2xx_audio_ops_t income_ac97_pdata = {
> > + .reset_gpio = 95,
> > +};
> > +
> > +static struct ucb1400_pdata income_ucb1400_pdata = {
> > + .irq = gpio_to_irq(GPIO113_INCOME_TS_IRQ),
> > +};
> > +
> > +static struct platform_device income_ucb1400_device = {
> > + .name = "ucb1400_core",
> > + .id = -1,
> > + .dev = {
> > + .platform_data = &income_ucb1400_pdata,
> > + },
> > +};
> > +
> > +static void __init income_tsc_init(void)
> > +{
> > + pxa_set_ac97_info(&income_ac97_pdata);
> > + platform_device_register(&income_ucb1400_device);
> > +}
> > +#else
> > +static inline void income_tsc_init(void) {}
> > +#endif
> > +
> > +/***********************************************************************
> > ******* + * I2C
> > +
> > ************************************************************************
> > ******/ +#if defined(CONFIG_I2C_PXA) || defined(CONFIG_I2C_PXA_MODULE)
> > +static struct i2c_board_info __initdata income_i2c_devs[] = {
> > + {
> > + I2C_BOARD_INFO("ds1340", 0x68),
> > + }, {
> > + I2C_BOARD_INFO("lm75", 0x4f),
> > + },
> > +};
> > +
> > +static void __init income_i2c_init(void)
> > +{
> > + pxa_set_i2c_info(NULL);
> > + pxa27x_set_i2c_power_info(NULL);
> > + i2c_register_board_info(0, ARRAY_AND_SIZE(income_i2c_devs));
> > +}
> > +#else
> > +static inline void income_i2c_init(void) {}
> > +#endif
> > +
> > +/***********************************************************************
> > ******* + * Framebuffer
> > +
> > ************************************************************************
> > ******/ +#if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)
> > +static struct pxafb_mode_info income_lcd_modes[] = {
> > +{
> > + .pixclock = 144700,
> > + .xres = 320,
> > + .yres = 240,
> > + .bpp = 32,
> > + .depth = 18,
> > +
> > + .left_margin = 10,
> > + .right_margin = 10,
> > + .upper_margin = 7,
> > + .lower_margin = 8,
> > +
> > + .hsync_len = 20,
> > + .vsync_len = 2,
> > +
> > + .sync = FB_SYNC_VERT_HIGH_ACT,
> > +},
> > +};
> > +
> > +static struct pxafb_mach_info income_lcd_screen = {
> > + .modes = income_lcd_modes,
> > + .num_modes = ARRAY_SIZE(income_lcd_modes),
> > + .lcd_conn = LCD_COLOR_TFT_18BPP | LCD_PCLK_EDGE_FALL,
> > +};
> > +
> > +static void __init income_lcd_init(void)
> > +{
> > + set_pxa_fb_info(&income_lcd_screen);
> > +}
> > +#else
> > +static inline void income_lcd_init(void) {}
> > +#endif
> > +
> > +/***********************************************************************
> > ******* + * Backlight
> > +
> > ************************************************************************
> > ******/ +#if defined(CONFIG_BACKLIGHT_PWM) ||
> > defined(CONFIG_BACKLIGHT_PWM__MODULE) +static struct
> > platform_pwm_backlight_data income_backlight_data = { + .pwm_id
= 0,
> > + .max_brightness = 0x3ff,
> > + .dft_brightness = 0x1ff,
> > + .pwm_period_ns = 1000000,
> > +};
> > +
> > +static struct platform_device income_backlight = {
> > + .name = "pwm-backlight",
> > + .dev = {
> > + .parent = &pxa27x_device_pwm0.dev,
> > + .platform_data = &income_backlight_data,
> > + },
> > +};
> > +
> > +static void __init income_pwm_init(void)
> > +{
> > + platform_device_register(&income_backlight);
> > +}
> > +#else
> > +static inline void income_pwm_init(void) {}
> > +#endif
> > +
> > +static void __init income_init(void)
> > +{
> > + pxa2xx_mfp_config(ARRAY_AND_SIZE(income_pin_config));
> > + pxa_set_ffuart_info(NULL);
> > + pxa_set_btuart_info(NULL);
> > + pxa_set_stuart_info(NULL);
> > +
> > + income_nor_init();
> > + income_eth_init();
> > + income_mmc_init();
> > + income_uhc_init();
> > + income_led_init();
> > + income_tsc_init();
> > + income_i2c_init();
> > + income_lcd_init();
> > + income_pwm_init();
> > +}
> > +
> > +MACHINE_START(INCOME, "Income s.r.o. SH-Dmaster PXA270 SBC")
> > + .phys_io = 0x40000000,
> > + .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
> > + .boot_params = 0xa0000100,
> > + .init_machine = income_init,
> > + .map_io = pxa_map_io,
> > + .init_irq = pxa27x_init_irq,
> > + .timer = &pxa_timer,
> > +MACHINE_END
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 2/2] pxa/income: Add Income SBC support
2010-05-13 4:46 ` Marek Vasut
@ 2010-05-13 9:35 ` Daniel Mack
0 siblings, 0 replies; 5+ messages in thread
From: Daniel Mack @ 2010-05-13 9:35 UTC (permalink / raw)
To: linux-arm-kernel
On Thu, May 13, 2010 at 06:46:32AM +0200, Marek Vasut wrote:
> Dne St 12. kv?tna 2010 09:34:20 Daniel Mack napsal(a):
> > On Wed, May 12, 2010 at 03:35:22AM +0200, Marek Vasut wrote:
> > > This is support for custom design based on Toradex Colibri PXA270 CPU
> > > card. Initial patch was by Pavel Revak.
> >
> > Hmm, so this is exactly what a module/board split would make sense for
> > now, as this patch duplicates tons of lines from one file to another.
> >
> > Marek, what do you think - is it worth giving that approach a try?
>
> I replied from the cellphone,but it probably didn't arrive. Anyway, I'm all for
> it. Should be do it after or before this goes in ?
I would rather not commit the support as it is right now, mainly because
with the new aproach of separated module and board code, there will be
need for another boot parameter. Things get too confusing if they're
changed too often.
The split should be easy though.
Daniel
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2010-05-13 9:35 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-05-12 1:35 [PATCH 1/2] pxa/colibri270: Add TSC support Marek Vasut
2010-05-12 1:35 ` [PATCH 2/2] pxa/income: Add Income SBC support Marek Vasut
2010-05-12 7:34 ` Daniel Mack
2010-05-13 4:46 ` Marek Vasut
2010-05-13 9:35 ` Daniel Mack
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).