root/arch/arm/mach-pxa/colibri-pxa300.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. colibri_pxa300_init_eth
  2. colibri_pxa300_init_eth
  3. colibri_pxa300_init_lcd
  4. colibri_pxa300_init_lcd
  5. colibri_pxa310_init_ac97
  6. colibri_pxa310_init_ac97
  7. colibri_pxa300_init

   1 // SPDX-License-Identifier: GPL-2.0-only
   2 /*
   3  *  arch/arm/mach-pxa/colibri-pxa300.c
   4  *
   5  *  Support for Toradex PXA300/310 based Colibri module
   6  *
   7  *  Daniel Mack <daniel@caiaq.de>
   8  *  Matthias Meier <matthias.j.meier@gmx.net>
   9  */
  10 
  11 #include <linux/init.h>
  12 #include <linux/kernel.h>
  13 #include <linux/platform_device.h>
  14 #include <linux/gpio.h>
  15 #include <linux/interrupt.h>
  16 
  17 #include <asm/mach-types.h>
  18 #include <linux/sizes.h>
  19 #include <asm/mach/arch.h>
  20 #include <asm/mach/irq.h>
  21 
  22 #include "pxa300.h"
  23 #include "colibri.h"
  24 #include <linux/platform_data/usb-ohci-pxa27x.h>
  25 #include <linux/platform_data/video-pxafb.h>
  26 #include <mach/audio.h>
  27 
  28 #include "generic.h"
  29 #include "devices.h"
  30 
  31 
  32 #ifdef CONFIG_MACH_COLIBRI_EVALBOARD
  33 static mfp_cfg_t colibri_pxa300_evalboard_pin_config[] __initdata = {
  34         /* MMC */
  35         GPIO7_MMC1_CLK,
  36         GPIO14_MMC1_CMD,
  37         GPIO3_MMC1_DAT0,
  38         GPIO4_MMC1_DAT1,
  39         GPIO5_MMC1_DAT2,
  40         GPIO6_MMC1_DAT3,
  41         GPIO13_GPIO,    /* GPIO13_COLIBRI_PXA300_SD_DETECT */
  42 
  43         /* UHC */
  44         GPIO0_2_USBH_PEN,
  45         GPIO1_2_USBH_PWR,
  46         GPIO77_USB_P3_1,
  47         GPIO78_USB_P3_2,
  48         GPIO79_USB_P3_3,
  49         GPIO80_USB_P3_4,
  50         GPIO81_USB_P3_5,
  51         GPIO82_USB_P3_6,
  52 
  53         /* I2C */
  54         GPIO21_I2C_SCL,
  55         GPIO22_I2C_SDA,
  56 };
  57 #else
  58 static mfp_cfg_t colibri_pxa300_evalboard_pin_config[] __initdata = {};
  59 #endif
  60 
  61 #if defined(CONFIG_AX88796)
  62 #define COLIBRI_ETH_IRQ_GPIO    mfp_to_gpio(GPIO26_GPIO)
  63 /*
  64  * Asix AX88796 Ethernet
  65  */
  66 static struct ax_plat_data colibri_asix_platdata = {
  67         .flags          = 0, /* defined later */
  68         .wordlength     = 2,
  69 };
  70 
  71 static struct resource colibri_asix_resource[] = {
  72         [0] = {
  73                 .start = PXA3xx_CS2_PHYS,
  74                 .end   = PXA3xx_CS2_PHYS + (0x20 * 2) - 1,
  75                 .flags = IORESOURCE_MEM,
  76         },
  77         [1] = {
  78                 .start = PXA_GPIO_TO_IRQ(COLIBRI_ETH_IRQ_GPIO),
  79                 .end   = PXA_GPIO_TO_IRQ(COLIBRI_ETH_IRQ_GPIO),
  80                 .flags = IORESOURCE_IRQ | IRQF_TRIGGER_FALLING,
  81         }
  82 };
  83 
  84 static struct platform_device asix_device = {
  85         .name           = "ax88796",
  86         .id             = 0,
  87         .num_resources  = ARRAY_SIZE(colibri_asix_resource),
  88         .resource       = colibri_asix_resource,
  89         .dev            = {
  90                 .platform_data = &colibri_asix_platdata
  91         }
  92 };
  93 
  94 static mfp_cfg_t colibri_pxa300_eth_pin_config[] __initdata = {
  95         GPIO1_nCS2,                     /* AX88796 chip select */
  96         GPIO26_GPIO | MFP_PULL_HIGH     /* AX88796 IRQ */
  97 };
  98 
  99 static void __init colibri_pxa300_init_eth(void)
 100 {
 101         colibri_pxa3xx_init_eth(&colibri_asix_platdata);
 102         pxa3xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa300_eth_pin_config));
 103         platform_device_register(&asix_device);
 104 }
 105 #else
 106 static inline void __init colibri_pxa300_init_eth(void) {}
 107 #endif /* CONFIG_AX88796 */
 108 
 109 #if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)
 110 static mfp_cfg_t colibri_pxa300_lcd_pin_config[] __initdata = {
 111         GPIO54_LCD_LDD_0,
 112         GPIO55_LCD_LDD_1,
 113         GPIO56_LCD_LDD_2,
 114         GPIO57_LCD_LDD_3,
 115         GPIO58_LCD_LDD_4,
 116         GPIO59_LCD_LDD_5,
 117         GPIO60_LCD_LDD_6,
 118         GPIO61_LCD_LDD_7,
 119         GPIO62_LCD_LDD_8,
 120         GPIO63_LCD_LDD_9,
 121         GPIO64_LCD_LDD_10,
 122         GPIO65_LCD_LDD_11,
 123         GPIO66_LCD_LDD_12,
 124         GPIO67_LCD_LDD_13,
 125         GPIO68_LCD_LDD_14,
 126         GPIO69_LCD_LDD_15,
 127         GPIO70_LCD_LDD_16,
 128         GPIO71_LCD_LDD_17,
 129         GPIO62_LCD_CS_N,
 130         GPIO72_LCD_FCLK,
 131         GPIO73_LCD_LCLK,
 132         GPIO74_LCD_PCLK,
 133         GPIO75_LCD_BIAS,
 134         GPIO76_LCD_VSYNC,
 135 };
 136 
 137 static void __init colibri_pxa300_init_lcd(void)
 138 {
 139         pxa3xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa300_lcd_pin_config));
 140 }
 141 
 142 #else
 143 static inline void colibri_pxa300_init_lcd(void) {}
 144 #endif /* CONFIG_FB_PXA || CONFIG_FB_PXA_MODULE */
 145 
 146 #if defined(CONFIG_SND_AC97_CODEC) || defined(CONFIG_SND_AC97_CODEC_MODULE)
 147 static mfp_cfg_t colibri_pxa310_ac97_pin_config[] __initdata = {
 148         GPIO24_AC97_SYSCLK,
 149         GPIO23_AC97_nACRESET,
 150         GPIO25_AC97_SDATA_IN_0,
 151         GPIO27_AC97_SDATA_OUT,
 152         GPIO28_AC97_SYNC,
 153         GPIO29_AC97_BITCLK
 154 };
 155 
 156 static inline void __init colibri_pxa310_init_ac97(void)
 157 {
 158         /* no AC97 codec on Colibri PXA300 */
 159         if (!cpu_is_pxa310())
 160                 return;
 161 
 162         pxa3xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa310_ac97_pin_config));
 163         pxa_set_ac97_info(NULL);
 164 }
 165 #else
 166 static inline void colibri_pxa310_init_ac97(void) {}
 167 #endif
 168 
 169 void __init colibri_pxa300_init(void)
 170 {
 171         colibri_pxa300_init_eth();
 172         colibri_pxa3xx_init_nand();
 173         colibri_pxa300_init_lcd();
 174         colibri_pxa3xx_init_lcd(mfp_to_gpio(GPIO39_GPIO));
 175         colibri_pxa310_init_ac97();
 176 
 177         /* Evalboard init */
 178         pxa3xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa300_evalboard_pin_config));
 179         colibri_evalboard_init();
 180 }
 181 
 182 MACHINE_START(COLIBRI300, "Toradex Colibri PXA300")
 183         .atag_offset    = 0x100,
 184         .init_machine   = colibri_pxa300_init,
 185         .map_io         = pxa3xx_map_io,
 186         .nr_irqs        = PXA_NR_IRQS,
 187         .init_irq       = pxa3xx_init_irq,
 188         .handle_irq     = pxa3xx_handle_irq,
 189         .init_time      = pxa_timer_init,
 190         .restart        = pxa_restart,
 191 MACHINE_END
 192 

/* [<][>][^][v][top][bottom][index][help] */