linux/arch/arm/mach-pxa/colibri-pxa270-income.c
<<
>>
Prefs
   1/*
   2 * linux/arch/arm/mach-pxa/income.c
   3 *
   4 * Support for Income s.r.o. SH-Dmaster PXA270 SBC
   5 *
   6 * Copyright (C) 2010
   7 * Marek Vasut <marek.vasut@gmail.com>
   8 * Pavel Revak <palo@bielyvlk.sk>
   9 *
  10 * This program is free software; you can redistribute it and/or modify
  11 * it under the terms of the GNU General Public License version 2 as
  12 * published by the Free Software Foundation.
  13 */
  14
  15#include <linux/bitops.h>
  16#include <linux/delay.h>
  17#include <linux/gpio.h>
  18#include <linux/init.h>
  19#include <linux/interrupt.h>
  20#include <linux/ioport.h>
  21#include <linux/kernel.h>
  22#include <linux/platform_device.h>
  23#include <linux/pwm_backlight.h>
  24#include <linux/i2c/pxa-i2c.h>
  25
  26#include <asm/irq.h>
  27#include <asm/mach-types.h>
  28
  29#include <mach/hardware.h>
  30#include <linux/platform_data/mmc-pxamci.h>
  31#include <linux/platform_data/usb-ohci-pxa27x.h>
  32#include <mach/pxa27x.h>
  33#include <mach/pxa27x-udc.h>
  34#include <linux/platform_data/video-pxafb.h>
  35
  36#include "devices.h"
  37#include "generic.h"
  38
  39#define GPIO114_INCOME_ETH_IRQ  (114)
  40#define GPIO0_INCOME_SD_DETECT  (0)
  41#define GPIO0_INCOME_SD_RO      (1)
  42#define GPIO54_INCOME_LED_A     (54)
  43#define GPIO55_INCOME_LED_B     (55)
  44#define GPIO113_INCOME_TS_IRQ   (113)
  45
  46/******************************************************************************
  47 * SD/MMC card controller
  48 ******************************************************************************/
  49#if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE)
  50static struct pxamci_platform_data income_mci_platform_data = {
  51        .ocr_mask               = MMC_VDD_32_33 | MMC_VDD_33_34,
  52        .gpio_power             = -1,
  53        .gpio_card_detect       = GPIO0_INCOME_SD_DETECT,
  54        .gpio_card_ro           = GPIO0_INCOME_SD_RO,
  55        .detect_delay_ms        = 200,
  56};
  57
  58static void __init income_mmc_init(void)
  59{
  60        pxa_set_mci_info(&income_mci_platform_data);
  61}
  62#else
  63static inline void income_mmc_init(void) {}
  64#endif
  65
  66/******************************************************************************
  67 * USB Host
  68 ******************************************************************************/
  69#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
  70static struct pxaohci_platform_data income_ohci_info = {
  71        .port_mode      = PMM_PERPORT_MODE,
  72        .flags          = ENABLE_PORT1 | POWER_CONTROL_LOW | POWER_SENSE_LOW,
  73};
  74
  75static void __init income_uhc_init(void)
  76{
  77        pxa_set_ohci_info(&income_ohci_info);
  78}
  79#else
  80static inline void income_uhc_init(void) {}
  81#endif
  82
  83/******************************************************************************
  84 * LED
  85 ******************************************************************************/
  86#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
  87struct gpio_led income_gpio_leds[] = {
  88        {
  89                .name                   = "income:green:leda",
  90                .default_trigger        = "none",
  91                .gpio                   = GPIO54_INCOME_LED_A,
  92                .active_low             = 1,
  93        },
  94        {
  95                .name                   = "income:green:ledb",
  96                .default_trigger        = "none",
  97                .gpio                   = GPIO55_INCOME_LED_B,
  98                .active_low             = 1,
  99        }
 100};
 101
 102static struct gpio_led_platform_data income_gpio_led_info = {
 103        .leds           = income_gpio_leds,
 104        .num_leds       = ARRAY_SIZE(income_gpio_leds),
 105};
 106
 107static struct platform_device income_leds = {
 108        .name   = "leds-gpio",
 109        .id     = -1,
 110        .dev    = {
 111                .platform_data  = &income_gpio_led_info,
 112        }
 113};
 114
 115static void __init income_led_init(void)
 116{
 117        platform_device_register(&income_leds);
 118}
 119#else
 120static inline void income_led_init(void) {}
 121#endif
 122
 123/******************************************************************************
 124 * I2C
 125 ******************************************************************************/
 126#if defined(CONFIG_I2C_PXA) || defined(CONFIG_I2C_PXA_MODULE)
 127static struct i2c_board_info __initdata income_i2c_devs[] = {
 128        {
 129                I2C_BOARD_INFO("ds1340", 0x68),
 130        }, {
 131                I2C_BOARD_INFO("lm75", 0x4f),
 132        },
 133};
 134
 135static void __init income_i2c_init(void)
 136{
 137        pxa_set_i2c_info(NULL);
 138        pxa27x_set_i2c_power_info(NULL);
 139        i2c_register_board_info(0, ARRAY_AND_SIZE(income_i2c_devs));
 140}
 141#else
 142static inline void income_i2c_init(void) {}
 143#endif
 144
 145/******************************************************************************
 146 * Framebuffer
 147 ******************************************************************************/
 148#if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)
 149static struct pxafb_mode_info income_lcd_modes[] = {
 150{
 151        .pixclock       = 144700,
 152        .xres           = 320,
 153        .yres           = 240,
 154        .bpp            = 32,
 155        .depth          = 18,
 156
 157        .left_margin    = 10,
 158        .right_margin   = 10,
 159        .upper_margin   = 7,
 160        .lower_margin   = 8,
 161
 162        .hsync_len      = 20,
 163        .vsync_len      = 2,
 164
 165        .sync           = FB_SYNC_VERT_HIGH_ACT,
 166},
 167};
 168
 169static struct pxafb_mach_info income_lcd_screen = {
 170        .modes          = income_lcd_modes,
 171        .num_modes      = ARRAY_SIZE(income_lcd_modes),
 172        .lcd_conn       = LCD_COLOR_TFT_18BPP | LCD_PCLK_EDGE_FALL,
 173};
 174
 175static void __init income_lcd_init(void)
 176{
 177        pxa_set_fb_info(NULL, &income_lcd_screen);
 178}
 179#else
 180static inline void income_lcd_init(void) {}
 181#endif
 182
 183/******************************************************************************
 184 * Backlight
 185 ******************************************************************************/
 186#if defined(CONFIG_BACKLIGHT_PWM) || defined(CONFIG_BACKLIGHT_PWM_MODULE)
 187static struct platform_pwm_backlight_data income_backlight_data = {
 188        .pwm_id         = 0,
 189        .max_brightness = 0x3ff,
 190        .dft_brightness = 0x1ff,
 191        .pwm_period_ns  = 1000000,
 192};
 193
 194static struct platform_device income_backlight = {
 195        .name   = "pwm-backlight",
 196        .dev    = {
 197                .parent         = &pxa27x_device_pwm0.dev,
 198                .platform_data  = &income_backlight_data,
 199        },
 200};
 201
 202static void __init income_pwm_init(void)
 203{
 204        platform_device_register(&income_backlight);
 205}
 206#else
 207static inline void income_pwm_init(void) {}
 208#endif
 209
 210void __init colibri_pxa270_income_boardinit(void)
 211{
 212        pxa_set_ffuart_info(NULL);
 213        pxa_set_btuart_info(NULL);
 214        pxa_set_stuart_info(NULL);
 215
 216        income_mmc_init();
 217        income_uhc_init();
 218        income_led_init();
 219        income_i2c_init();
 220        income_lcd_init();
 221        income_pwm_init();
 222}
 223
 224