diff options
Diffstat (limited to 'arch/arm/mach-ns9xxx/mach-cc9p9215js.c')
-rw-r--r-- | arch/arm/mach-ns9xxx/mach-cc9p9215js.c | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/arch/arm/mach-ns9xxx/mach-cc9p9215js.c b/arch/arm/mach-ns9xxx/mach-cc9p9215js.c new file mode 100644 index 000000000000..96f8220f0eec --- /dev/null +++ b/arch/arm/mach-ns9xxx/mach-cc9p9215js.c @@ -0,0 +1,192 @@ +/* + * 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 <linux/i2c.h> +#include <linux/i2c/pca953x.h> +#include <linux/spi/spi.h> +#include <linux/spi/ads7846.h> +#include <linux/gpio.h> + +#include <asm/mach/arch.h> +#include <asm/mach-types.h> + +#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 |