/* * arch/arm/mach-ns9xxx/mach-cc9p9215.c * * Copyright (C) 2007 by Digi International Inc. * All rights reserved. * * 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 #include #include #include #include #include #include #include "irq.h" #include "processor-ns921x.h" #include "ns921x_devices.h" #include "ns9215_devices.h" #include "cc9p9215_devices.h" /* I2C devices */ #if defined(CONFIG_GPIO_PCA953X) || defined(CONFIG_GPIO_PCA953X_MODULE) static struct pca953x_platform_data pca9554_data = { .gpio_base = 108, }; #endif static struct i2c_board_info i2c_devices[] __initdata = { #if defined(CONFIG_GPIO_PCA953X) || defined(CONFIG_GPIO_PCA953X_MODULE) { I2C_BOARD_INFO("pca9554", 0x20), .platform_data = &pca9554_data, }, #endif }; #ifdef CONFIG_CC9P9215JS_TOUCH static int touch_pendown_state(void) { return gpio_get_value(101) ? 0 : 1; } static struct ads7846_platform_data cc9p9215js_touch_data = { .model = 7843, .get_pendown_state = touch_pendown_state, .x_min = 100, .y_min = 100, .x_max = 4000, .y_max = 4000, .rotate = 180, .buflen = 20, .skip_samples = 0, }; void __init cc9p9215js_add_device_touch(void) { if (gpio_request(101, "ads7846")) return; gpio_configure_ns921x(101, 0, 0, 2, 0); } #define CC9P9215JS_TOUCH \ { \ .modalias = "ads7846", \ .max_speed_hz = 300000, \ .irq = IRQ_NS9XXX_EXT3, \ .bus_num = 1, \ .chip_select = 0, \ .platform_data = &cc9p9215js_touch_data, \ }, #else #define CC9P9215JS_TOUCH void __init cc9p9215js_add_device_touch(void) {} #endif /* SPI devices */ static struct spi_board_info spi_devices[] __initdata = { CC9P9215JS_TOUCH #if defined(CONFIG_SPI_SPIDEV) || defined(CONFIG_SPI_SPIDEV_MODULE) { .modalias = "spidev", .max_speed_hz = 10000000, .bus_num = 1, .chip_select = 0, }, #endif }; static void __init mach_cc9p9215js_init_machine(void) { /* register several system clocks */ ns921x_init_machine(); /* UARTs */ #if defined(CONFIG_CC9P9215JS_SERIAL_PORTA_RXTX) ns9xxx_add_device_cc9p9215_uarta_rxtx(); #elif defined(CONFIG_CC9P9215JS_SERIAL_PORTA_CTSRTSRXTX) || \ defined(CONFIG_CC9P9215JS_SERIAL_PORTA_RXTX485) ns9xxx_add_device_cc9p9215_uarta_ctsrtsrxtx(); #elif defined(CONFIG_CC9P9215JS_SERIAL_PORTA_FULL) ns9xxx_add_device_cc9p9215_uarta_full(); #endif #if defined(CONFIG_CC9P9215JS_SERIAL_PORTB_RXTX) ns9xxx_add_device_cc9p9215_uartb_rxtx(); #elif defined(CONFIG_CC9P9215JS_SERIAL_PORTB_CTSRTSRXTX) || \ defined(CONFIG_CC9P9215JS_SERIAL_PORTB_RXTX485) ns9xxx_add_device_cc9p9215_uartb_ctsrtsrxtx(); #elif defined(CONFIG_CC9P9215JS_SERIAL_PORTB_FULL) ns9xxx_add_device_cc9p9215_uartb_full(); #endif #if defined(CONFIG_CC9P9215JS_SERIAL_PORTC_RXTX) ns9xxx_add_device_cc9p9215_uartc_rxtx(); #elif defined(CONFIG_CC9P9215JS_SERIAL_PORTC_CTSRTSRXTX) || \ defined(CONFIG_CC9P9215JS_SERIAL_PORTC_RXTX485) ns9xxx_add_device_cc9p9215_uartc_ctsrtsrxtx(); #elif defined(CONFIG_CC9P9215JS_SERIAL_PORTC_FULL) ns9xxx_add_device_cc9p9215_uartc_full(); #endif #if defined(CONFIG_CC9P9215JS_SERIAL_PORTD_RXTX) ns9xxx_add_device_cc9p9215_uartd_rxtx(); #elif defined(CONFIG_CC9P9215JS_SERIAL_PORTD_CTSRTSRXTX) || \ defined(CONFIG_CC9P9215JS_SERIAL_PORTD_RXTX485) ns9xxx_add_device_cc9p9215_uartd_ctsrtsrxtx(); #elif defined(CONFIG_CC9P9215JS_SERIAL_PORTD_FULL) ns9xxx_add_device_cc9p9215_uartd_full(); #endif /* Ethernet */ ns9xxx_add_device_cc9p9215_eth(); /* SPI */ #ifdef CONFIG_CC9P9215JS_SPI ns9xxx_add_device_cc9p9215_spi(); #endif /* SPI devices */ spi_register_board_info(spi_devices, ARRAY_SIZE(spi_devices)); /* Watchdog timer */ ns9xxx_add_device_ns921x_wdt(); /* NOR Flash */ ns9xxx_add_device_cc9p9215_flash(); /* I2C controller */ ns9xxx_add_device_cc9p9215_i2c(); /* I2C devices */ i2c_register_board_info(0, i2c_devices, ARRAY_SIZE(i2c_devices)); /* Leds */ ns9xxx_add_device_ns9215_leds(); /* Analog Digital Converter */ ns9xxx_add_device_ns9215_adc(); /* AES HW Encryption module */ #if defined(CONFIG_CRYPTO_DEV_NS921X_AES) || \ defined(CONFIG_CRYPTO_DEV_NS921X_AES_MODULE) ns9xxx_add_device_ns921x_aes(); #endif /* Real Time Clock */ ns9xxx_add_device_ns9215_rtc(); /* GPIO 4 is used as wake up gpio */ (void)ns921x_extgpio_pm_wakeup_init(4); /* Init the FIM devices */ ns9xxx_add_device_ns921x_fims(); /* Video */ ns9xxx_add_device_cc9p9215_edt_diplay(); /* Touchscreen */ cc9p9215js_add_device_touch(); } MACHINE_START(CC9P9215JS, "ConnectCore 9P 9215 on a JSCC9P9215 Devboard") .map_io = ns921x_map_io, .init_irq = ns9xxx_init_irq, .init_machine = mach_cc9p9215js_init_machine, .timer = &ns921x_timer, .boot_params = 0x100, MACHINE_END