static int __init merisc_init(void) { detect_merisc_board_id(); printk(KERN_NOTICE "BOARD: Merisc %s revision %s\n", merisc_model(), merisc_revision()); /* Reserve pins for SDRAM */ at32_reserve_pin(GPIO_PIOE_BASE, ATMEL_EBI_PE_DATA_ALL | (1 << 26)); if (merisc_board_id >= 1) at32_map_usart(2, 2, 0); at32_add_device_usart(0); at32_add_device_usart(1); if (merisc_board_id >= 1) at32_add_device_usart(2); at32_add_device_usart(3); set_hw_addr(at32_add_device_eth(0, ð_data[0])); /* ADS7846 PENIRQ */ if (merisc_board_id == 0) { ads7846_data.get_pendown_state = ads7846_get_pendown_state_PB26; at32_select_periph(GPIO_PIOB_BASE, 1 << 26, GPIO_PERIPH_A, AT32_GPIOF_PULLUP); spi0_board_info[0].irq = AT32_EXTINT(1); } else { ads7846_data.get_pendown_state = ads7846_get_pendown_state_PB28; at32_select_periph(GPIO_PIOB_BASE, 1 << 28, GPIO_PERIPH_A, AT32_GPIOF_PULLUP); spi0_board_info[0].irq = AT32_EXTINT(3); } /* ADS7846 busy pin */ at32_select_gpio(GPIO_PIN_PA(4), AT32_GPIOF_PULLUP); at32_add_device_spi(0, spi0_board_info, ARRAY_SIZE(spi0_board_info)); at32_add_device_mci(0, &mci0_data); #ifdef CONFIG_LEDS_ATMEL_PWM at32_add_device_pwm((1 << 0) | (1 << 2)); platform_device_register(&stk_pwm_led_dev); #else at32_add_device_pwm((1 << 2)); #endif at32_select_gpio(i2c_gpio_data.sda_pin, AT32_GPIOF_MULTIDRV | AT32_GPIOF_OUTPUT | AT32_GPIOF_HIGH); at32_select_gpio(i2c_gpio_data.scl_pin, AT32_GPIOF_MULTIDRV | AT32_GPIOF_OUTPUT | AT32_GPIOF_HIGH); platform_device_register(&i2c_gpio_device); i2c_register_board_info(0, i2c_info, ARRAY_SIZE(i2c_info)); return 0; }
#include <linux/kernel.h> #include <linux/init.h> #include <linux/list.h> #include <linux/spinlock.h> #include <linux/device.h> #include <linux/sysdev.h> #include <linux/timer.h> #include <linux/err.h> #include <linux/ctype.h> #include "merisc.h" static ssize_t merisc_model_show(struct class *class, char *buf) { ssize_t ret = 0; sprintf(buf, "%s\n", merisc_model()); ret = strlen(buf) + 1; return ret; } static ssize_t merisc_revision_show(struct class *class, char *buf) { ssize_t ret = 0; sprintf(buf, "%s\n", merisc_revision()); ret = strlen(buf) + 1; return ret; }