Path: blob/master/arch/arm/mach-pxa/colibri-pxa300.c
10817 views
/*1* arch/arm/mach-pxa/colibri-pxa300.c2*3* Support for Toradex PXA300/310 based Colibri module4*5* Daniel Mack <[email protected]>6* Matthias Meier <[email protected]>7*8* This program is free software; you can redistribute it and/or modify9* it under the terms of the GNU General Public License version 2 as10* published by the Free Software Foundation.11*/1213#include <linux/init.h>14#include <linux/kernel.h>15#include <linux/platform_device.h>16#include <linux/gpio.h>17#include <linux/interrupt.h>1819#include <asm/mach-types.h>20#include <asm/sizes.h>21#include <asm/mach/arch.h>22#include <asm/mach/irq.h>2324#include <mach/pxa300.h>25#include <mach/colibri.h>26#include <mach/ohci.h>27#include <mach/pxafb.h>28#include <mach/audio.h>2930#include "generic.h"31#include "devices.h"323334#ifdef CONFIG_MACH_COLIBRI_EVALBOARD35static mfp_cfg_t colibri_pxa300_evalboard_pin_config[] __initdata = {36/* MMC */37GPIO7_MMC1_CLK,38GPIO14_MMC1_CMD,39GPIO3_MMC1_DAT0,40GPIO4_MMC1_DAT1,41GPIO5_MMC1_DAT2,42GPIO6_MMC1_DAT3,43GPIO13_GPIO, /* GPIO13_COLIBRI_PXA300_SD_DETECT */4445/* UHC */46GPIO0_2_USBH_PEN,47GPIO1_2_USBH_PWR,48GPIO77_USB_P3_1,49GPIO78_USB_P3_2,50GPIO79_USB_P3_3,51GPIO80_USB_P3_4,52GPIO81_USB_P3_5,53GPIO82_USB_P3_6,5455/* I2C */56GPIO21_I2C_SCL,57GPIO22_I2C_SDA,58};59#else60static mfp_cfg_t colibri_pxa300_evalboard_pin_config[] __initdata = {};61#endif6263#if defined(CONFIG_AX88796)64#define COLIBRI_ETH_IRQ_GPIO mfp_to_gpio(GPIO26_GPIO)65/*66* Asix AX88796 Ethernet67*/68static struct ax_plat_data colibri_asix_platdata = {69.flags = 0, /* defined later */70.wordlength = 2,71};7273static struct resource colibri_asix_resource[] = {74[0] = {75.start = PXA3xx_CS2_PHYS,76.end = PXA3xx_CS2_PHYS + (0x20 * 2) - 1,77.flags = IORESOURCE_MEM,78},79[1] = {80.start = gpio_to_irq(COLIBRI_ETH_IRQ_GPIO),81.end = gpio_to_irq(COLIBRI_ETH_IRQ_GPIO),82.flags = IORESOURCE_IRQ | IRQF_TRIGGER_FALLING,83}84};8586static struct platform_device asix_device = {87.name = "ax88796",88.id = 0,89.num_resources = ARRAY_SIZE(colibri_asix_resource),90.resource = colibri_asix_resource,91.dev = {92.platform_data = &colibri_asix_platdata93}94};9596static mfp_cfg_t colibri_pxa300_eth_pin_config[] __initdata = {97GPIO1_nCS2, /* AX88796 chip select */98GPIO26_GPIO | MFP_PULL_HIGH /* AX88796 IRQ */99};100101static void __init colibri_pxa300_init_eth(void)102{103colibri_pxa3xx_init_eth(&colibri_asix_platdata);104pxa3xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa300_eth_pin_config));105platform_device_register(&asix_device);106}107#else108static inline void __init colibri_pxa300_init_eth(void) {}109#endif /* CONFIG_AX88796 */110111#if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)112static mfp_cfg_t colibri_pxa300_lcd_pin_config[] __initdata = {113GPIO54_LCD_LDD_0,114GPIO55_LCD_LDD_1,115GPIO56_LCD_LDD_2,116GPIO57_LCD_LDD_3,117GPIO58_LCD_LDD_4,118GPIO59_LCD_LDD_5,119GPIO60_LCD_LDD_6,120GPIO61_LCD_LDD_7,121GPIO62_LCD_LDD_8,122GPIO63_LCD_LDD_9,123GPIO64_LCD_LDD_10,124GPIO65_LCD_LDD_11,125GPIO66_LCD_LDD_12,126GPIO67_LCD_LDD_13,127GPIO68_LCD_LDD_14,128GPIO69_LCD_LDD_15,129GPIO70_LCD_LDD_16,130GPIO71_LCD_LDD_17,131GPIO62_LCD_CS_N,132GPIO72_LCD_FCLK,133GPIO73_LCD_LCLK,134GPIO74_LCD_PCLK,135GPIO75_LCD_BIAS,136GPIO76_LCD_VSYNC,137};138139static void __init colibri_pxa300_init_lcd(void)140{141pxa3xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa300_lcd_pin_config));142}143144#else145static inline void colibri_pxa300_init_lcd(void) {}146#endif /* CONFIG_FB_PXA || CONFIG_FB_PXA_MODULE */147148#if defined(CONFIG_SND_AC97_CODEC) || defined(CONFIG_SND_AC97_CODEC_MODULE)149static mfp_cfg_t colibri_pxa310_ac97_pin_config[] __initdata = {150GPIO24_AC97_SYSCLK,151GPIO23_AC97_nACRESET,152GPIO25_AC97_SDATA_IN_0,153GPIO27_AC97_SDATA_OUT,154GPIO28_AC97_SYNC,155GPIO29_AC97_BITCLK156};157158static inline void __init colibri_pxa310_init_ac97(void)159{160/* no AC97 codec on Colibri PXA300 */161if (!cpu_is_pxa310())162return;163164pxa3xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa310_ac97_pin_config));165pxa_set_ac97_info(NULL);166}167#else168static inline void colibri_pxa310_init_ac97(void) {}169#endif170171void __init colibri_pxa300_init(void)172{173colibri_pxa300_init_eth();174colibri_pxa3xx_init_nand();175colibri_pxa300_init_lcd();176colibri_pxa3xx_init_lcd(mfp_to_gpio(GPIO39_GPIO));177colibri_pxa310_init_ac97();178179/* Evalboard init */180pxa3xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa300_evalboard_pin_config));181colibri_evalboard_init();182}183184MACHINE_START(COLIBRI300, "Toradex Colibri PXA300")185.boot_params = COLIBRI_SDRAM_BASE + 0x100,186.init_machine = colibri_pxa300_init,187.map_io = pxa3xx_map_io,188.init_irq = pxa3xx_init_irq,189.timer = &pxa_timer,190MACHINE_END191192193194