14c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack/* 2a3172e5413a06af772c6ad34c0f68a2ebbdbcf86Marek Vasut * linux/arch/arm/mach-pxa/colibri-evalboard.c 34c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack * 4a3172e5413a06af772c6ad34c0f68a2ebbdbcf86Marek Vasut * Support for Toradex Colibri Evaluation Carrier Board 54c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack * Daniel Mack <daniel@caiaq.de> 64c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack * Marek Vasut <marek.vasut@gmail.com> 74c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack * 84c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack * This program is free software; you can redistribute it and/or modify 94c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack * it under the terms of the GNU General Public License version 2 as 104c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack * published by the Free Software Foundation. 114c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack */ 124c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack 134c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack#include <linux/init.h> 144c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack#include <linux/kernel.h> 154c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack#include <linux/platform_device.h> 164c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack#include <linux/interrupt.h> 174c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack#include <linux/gpio.h> 184c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack#include <asm/mach-types.h> 194c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack#include <mach/hardware.h> 204c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack#include <asm/mach/arch.h> 21072e1ae73c65496355279505de378b33c916e364Marek Vasut#include <linux/i2c.h> 22b459396ee9398bdf61e3118ca730394f58e90c9cSebastian Andrzej Siewior#include <linux/i2c/pxa-i2c.h> 234c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack 244c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack#include <mach/pxa27x.h> 254c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack#include <mach/colibri.h> 264c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack#include <mach/mmc.h> 274c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack#include <mach/ohci.h> 284c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack#include <mach/pxa27x-udc.h> 294c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack 304c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack#include "generic.h" 314c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack#include "devices.h" 324c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack 334c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack/****************************************************************************** 344c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack * SD/MMC card controller 354c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack ******************************************************************************/ 364c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack#if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE) 37a3172e5413a06af772c6ad34c0f68a2ebbdbcf86Marek Vasutstatic struct pxamci_platform_data colibri_mci_platform_data = { 384c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, 394c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack .gpio_power = -1, 404c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack .gpio_card_ro = -1, 414c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack .detect_delay_ms = 200, 424c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack}; 434c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack 44a3172e5413a06af772c6ad34c0f68a2ebbdbcf86Marek Vasutstatic void __init colibri_mmc_init(void) 454c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack{ 469b6956f45132f9bf696e9f6c2e457bdfa8e08721Marek Vasut if (machine_is_colibri()) /* PXA270 Colibri */ 47a3172e5413a06af772c6ad34c0f68a2ebbdbcf86Marek Vasut colibri_mci_platform_data.gpio_card_detect = 489b6956f45132f9bf696e9f6c2e457bdfa8e08721Marek Vasut GPIO0_COLIBRI_PXA270_SD_DETECT; 499b6956f45132f9bf696e9f6c2e457bdfa8e08721Marek Vasut if (machine_is_colibri300()) /* PXA300 Colibri */ 50a3172e5413a06af772c6ad34c0f68a2ebbdbcf86Marek Vasut colibri_mci_platform_data.gpio_card_detect = 5157834a722473848338b1967f7fdd9907c713b0a7Bjørn Forsman GPIO13_COLIBRI_PXA300_SD_DETECT; 529b6956f45132f9bf696e9f6c2e457bdfa8e08721Marek Vasut else /* PXA320 Colibri */ 53a3172e5413a06af772c6ad34c0f68a2ebbdbcf86Marek Vasut colibri_mci_platform_data.gpio_card_detect = 549b6956f45132f9bf696e9f6c2e457bdfa8e08721Marek Vasut GPIO28_COLIBRI_PXA320_SD_DETECT; 559b6956f45132f9bf696e9f6c2e457bdfa8e08721Marek Vasut 56a3172e5413a06af772c6ad34c0f68a2ebbdbcf86Marek Vasut pxa_set_mci_info(&colibri_mci_platform_data); 574c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack} 584c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack#else 59a3172e5413a06af772c6ad34c0f68a2ebbdbcf86Marek Vasutstatic inline void colibri_mmc_init(void) {} 604c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack#endif 614c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack 624c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack/****************************************************************************** 634c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack * USB Host 644c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack ******************************************************************************/ 654c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) 66a3172e5413a06af772c6ad34c0f68a2ebbdbcf86Marek Vasutstatic int colibri_ohci_init(struct device *dev) 674c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack{ 684c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack UP2OCR = UP2OCR_HXS | UP2OCR_HXOE | UP2OCR_DPPDE | UP2OCR_DMPDE; 694c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack return 0; 704c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack} 714c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack 72a3172e5413a06af772c6ad34c0f68a2ebbdbcf86Marek Vasutstatic struct pxaohci_platform_data colibri_ohci_info = { 734c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack .port_mode = PMM_PERPORT_MODE, 749b6956f45132f9bf696e9f6c2e457bdfa8e08721Marek Vasut .flags = ENABLE_PORT1 | 754c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack POWER_CONTROL_LOW | POWER_SENSE_LOW, 76a3172e5413a06af772c6ad34c0f68a2ebbdbcf86Marek Vasut .init = colibri_ohci_init, 774c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack}; 784c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack 79a3172e5413a06af772c6ad34c0f68a2ebbdbcf86Marek Vasutstatic void __init colibri_uhc_init(void) 804c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack{ 819b6956f45132f9bf696e9f6c2e457bdfa8e08721Marek Vasut /* Colibri PXA270 has two usb ports, TBA for 320 */ 829b6956f45132f9bf696e9f6c2e457bdfa8e08721Marek Vasut if (machine_is_colibri()) 83a3172e5413a06af772c6ad34c0f68a2ebbdbcf86Marek Vasut colibri_ohci_info.flags |= ENABLE_PORT2; 849b6956f45132f9bf696e9f6c2e457bdfa8e08721Marek Vasut 85a3172e5413a06af772c6ad34c0f68a2ebbdbcf86Marek Vasut pxa_set_ohci_info(&colibri_ohci_info); 864c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack} 874c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack#else 88a3172e5413a06af772c6ad34c0f68a2ebbdbcf86Marek Vasutstatic inline void colibri_uhc_init(void) {} 894c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack#endif 904c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack 91072e1ae73c65496355279505de378b33c916e364Marek Vasut/****************************************************************************** 92072e1ae73c65496355279505de378b33c916e364Marek Vasut * I2C RTC 93072e1ae73c65496355279505de378b33c916e364Marek Vasut ******************************************************************************/ 94072e1ae73c65496355279505de378b33c916e364Marek Vasut#if defined(CONFIG_RTC_DRV_DS1307) || defined(CONFIG_RTC_DRV_DS1307_MODULE) 95a3172e5413a06af772c6ad34c0f68a2ebbdbcf86Marek Vasutstatic struct i2c_board_info __initdata colibri_i2c_devs[] = { 96072e1ae73c65496355279505de378b33c916e364Marek Vasut { 97072e1ae73c65496355279505de378b33c916e364Marek Vasut I2C_BOARD_INFO("m41t00", 0x68), 98072e1ae73c65496355279505de378b33c916e364Marek Vasut }, 99072e1ae73c65496355279505de378b33c916e364Marek Vasut}; 100072e1ae73c65496355279505de378b33c916e364Marek Vasut 101a3172e5413a06af772c6ad34c0f68a2ebbdbcf86Marek Vasutstatic void __init colibri_rtc_init(void) 102072e1ae73c65496355279505de378b33c916e364Marek Vasut{ 103072e1ae73c65496355279505de378b33c916e364Marek Vasut pxa_set_i2c_info(NULL); 104a3172e5413a06af772c6ad34c0f68a2ebbdbcf86Marek Vasut i2c_register_board_info(0, ARRAY_AND_SIZE(colibri_i2c_devs)); 105072e1ae73c65496355279505de378b33c916e364Marek Vasut} 106072e1ae73c65496355279505de378b33c916e364Marek Vasut#else 107a3172e5413a06af772c6ad34c0f68a2ebbdbcf86Marek Vasutstatic inline void colibri_rtc_init(void) {} 108072e1ae73c65496355279505de378b33c916e364Marek Vasut#endif 109072e1ae73c65496355279505de378b33c916e364Marek Vasut 110a3172e5413a06af772c6ad34c0f68a2ebbdbcf86Marek Vasutvoid __init colibri_evalboard_init(void) 1114c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack{ 1124c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack pxa_set_ffuart_info(NULL); 1134c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack pxa_set_btuart_info(NULL); 1144c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack pxa_set_stuart_info(NULL); 1154c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack 116a3172e5413a06af772c6ad34c0f68a2ebbdbcf86Marek Vasut colibri_mmc_init(); 117a3172e5413a06af772c6ad34c0f68a2ebbdbcf86Marek Vasut colibri_uhc_init(); 118a3172e5413a06af772c6ad34c0f68a2ebbdbcf86Marek Vasut colibri_rtc_init(); 1194c243c8584be9fbff9e11fc37fa2449448c5d442Daniel Mack} 120