|
@@ -337,3 +337,177 @@ static struct platform_device bfin_sport1_uart_device = {
|
|
|
|
|
|
#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
|
|
|
#include <linux/input.h>
|
|
|
+#include <linux/gpio_keys.h>
|
|
|
+
|
|
|
+static struct gpio_keys_button bfin_gpio_keys_table[] = {
|
|
|
+ {BTN_0, GPIO_PF4, 0, "gpio-keys: BTN0"},
|
|
|
+ {BTN_1, GPIO_PF5, 0, "gpio-keys: BTN1"},
|
|
|
+ {BTN_2, GPIO_PF6, 0, "gpio-keys: BTN2"},
|
|
|
+}; /* Mapped to the first three PF Test Points */
|
|
|
+
|
|
|
+static struct gpio_keys_platform_data bfin_gpio_keys_data = {
|
|
|
+ .buttons = bfin_gpio_keys_table,
|
|
|
+ .nbuttons = ARRAY_SIZE(bfin_gpio_keys_table),
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device bfin_device_gpiokeys = {
|
|
|
+ .name = "gpio-keys",
|
|
|
+ .dev = {
|
|
|
+ .platform_data = &bfin_gpio_keys_data,
|
|
|
+ },
|
|
|
+};
|
|
|
+#endif
|
|
|
+
|
|
|
+#if defined(CONFIG_I2C_GPIO) || defined(CONFIG_I2C_GPIO_MODULE)
|
|
|
+#include <linux/i2c-gpio.h>
|
|
|
+
|
|
|
+static struct i2c_gpio_platform_data i2c_gpio_data = {
|
|
|
+ .sda_pin = GPIO_PF8,
|
|
|
+ .scl_pin = GPIO_PF9,
|
|
|
+ .sda_is_open_drain = 0,
|
|
|
+ .scl_is_open_drain = 0,
|
|
|
+ .udelay = 40,
|
|
|
+}; /* This hasn't actually been used these pins
|
|
|
+ * are (currently) free pins on the expansion connector */
|
|
|
+
|
|
|
+static struct platform_device i2c_gpio_device = {
|
|
|
+ .name = "i2c-gpio",
|
|
|
+ .id = 0,
|
|
|
+ .dev = {
|
|
|
+ .platform_data = &i2c_gpio_data,
|
|
|
+ },
|
|
|
+};
|
|
|
+#endif
|
|
|
+
|
|
|
+static struct i2c_board_info __initdata bfin_i2c_board_info[] = {
|
|
|
+};
|
|
|
+
|
|
|
+static const unsigned int cclk_vlev_datasheet[] =
|
|
|
+{
|
|
|
+ VRPAIR(VLEV_085, 250000000),
|
|
|
+ VRPAIR(VLEV_090, 376000000),
|
|
|
+ VRPAIR(VLEV_095, 426000000),
|
|
|
+ VRPAIR(VLEV_100, 426000000),
|
|
|
+ VRPAIR(VLEV_105, 476000000),
|
|
|
+ VRPAIR(VLEV_110, 476000000),
|
|
|
+ VRPAIR(VLEV_115, 476000000),
|
|
|
+ VRPAIR(VLEV_120, 600000000),
|
|
|
+ VRPAIR(VLEV_125, 600000000),
|
|
|
+ VRPAIR(VLEV_130, 600000000),
|
|
|
+};
|
|
|
+
|
|
|
+static struct bfin_dpmc_platform_data bfin_dmpc_vreg_data = {
|
|
|
+ .tuple_tab = cclk_vlev_datasheet,
|
|
|
+ .tabsize = ARRAY_SIZE(cclk_vlev_datasheet),
|
|
|
+ .vr_settling_time = 25 /* us */,
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device bfin_dpmc = {
|
|
|
+ .name = "bfin dpmc",
|
|
|
+ .dev = {
|
|
|
+ .platform_data = &bfin_dmpc_vreg_data,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device *stamp_devices[] __initdata = {
|
|
|
+
|
|
|
+ &bfin_dpmc,
|
|
|
+
|
|
|
+#if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_DRV_BFIN_MODULE)
|
|
|
+ &rtc_device,
|
|
|
+#endif
|
|
|
+
|
|
|
+#if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE)
|
|
|
+ &smc91x_device,
|
|
|
+#endif
|
|
|
+
|
|
|
+
|
|
|
+#if defined(CONFIG_SPI_BFIN5XX) || defined(CONFIG_SPI_BFIN5XX_MODULE)
|
|
|
+ &bfin_spi0_device,
|
|
|
+#endif
|
|
|
+
|
|
|
+#if defined(CONFIG_SERIAL_BFIN) || defined(CONFIG_SERIAL_BFIN_MODULE)
|
|
|
+#ifdef CONFIG_SERIAL_BFIN_UART0
|
|
|
+ &bfin_uart0_device,
|
|
|
+#endif
|
|
|
+#endif
|
|
|
+
|
|
|
+#if defined(CONFIG_BFIN_SIR) || defined(CONFIG_BFIN_SIR_MODULE)
|
|
|
+#ifdef CONFIG_BFIN_SIR0
|
|
|
+ &bfin_sir0_device,
|
|
|
+#endif
|
|
|
+#endif
|
|
|
+
|
|
|
+#if defined(CONFIG_SERIAL_BFIN_SPORT) || defined(CONFIG_SERIAL_BFIN_SPORT_MODULE)
|
|
|
+#ifdef CONFIG_SERIAL_BFIN_SPORT0_UART
|
|
|
+ &bfin_sport0_uart_device,
|
|
|
+#endif
|
|
|
+#ifdef CONFIG_SERIAL_BFIN_SPORT1_UART
|
|
|
+ &bfin_sport1_uart_device,
|
|
|
+#endif
|
|
|
+#endif
|
|
|
+
|
|
|
+#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
|
|
|
+ &bfin_device_gpiokeys,
|
|
|
+#endif
|
|
|
+
|
|
|
+#if defined(CONFIG_I2C_GPIO) || defined(CONFIG_I2C_GPIO_MODULE)
|
|
|
+ &i2c_gpio_device,
|
|
|
+#endif
|
|
|
+};
|
|
|
+
|
|
|
+static int __init blackstamp_init(void)
|
|
|
+{
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ printk(KERN_INFO "%s(): registering device resources\n", __func__);
|
|
|
+
|
|
|
+ i2c_register_board_info(0, bfin_i2c_board_info,
|
|
|
+ ARRAY_SIZE(bfin_i2c_board_info));
|
|
|
+
|
|
|
+ ret = platform_add_devices(stamp_devices, ARRAY_SIZE(stamp_devices));
|
|
|
+ if (ret < 0)
|
|
|
+ return ret;
|
|
|
+
|
|
|
+#if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE)
|
|
|
+ /*
|
|
|
+ * setup BF533_STAMP CPLD to route AMS3 to Ethernet MAC.
|
|
|
+ * the bfin-async-map driver takes care of flipping between
|
|
|
+ * flash and ethernet when necessary.
|
|
|
+ */
|
|
|
+ ret = gpio_request(GPIO_PF0, "enet_cpld");
|
|
|
+ if (!ret) {
|
|
|
+ gpio_direction_output(GPIO_PF0, 1);
|
|
|
+ gpio_free(GPIO_PF0);
|
|
|
+ }
|
|
|
+#endif
|
|
|
+
|
|
|
+ spi_register_board_info(bfin_spi_board_info, ARRAY_SIZE(bfin_spi_board_info));
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+arch_initcall(blackstamp_init);
|
|
|
+
|
|
|
+static struct platform_device *stamp_early_devices[] __initdata = {
|
|
|
+#if defined(CONFIG_SERIAL_BFIN_CONSOLE) || defined(CONFIG_EARLY_PRINTK)
|
|
|
+#ifdef CONFIG_SERIAL_BFIN_UART0
|
|
|
+ &bfin_uart0_device,
|
|
|
+#endif
|
|
|
+#endif
|
|
|
+
|
|
|
+#if defined(CONFIG_SERIAL_BFIN_SPORT_CONSOLE)
|
|
|
+#ifdef CONFIG_SERIAL_BFIN_SPORT0_UART
|
|
|
+ &bfin_sport0_uart_device,
|
|
|
+#endif
|
|
|
+#ifdef CONFIG_SERIAL_BFIN_SPORT1_UART
|
|
|
+ &bfin_sport1_uart_device,
|
|
|
+#endif
|
|
|
+#endif
|
|
|
+};
|
|
|
+
|
|
|
+void __init native_machine_early_platform_add_devices(void)
|
|
|
+{
|
|
|
+ printk(KERN_INFO "register early platform devices\n");
|
|
|
+ early_platform_add_devices(stamp_early_devices,
|
|
|
+ ARRAY_SIZE(stamp_early_devices));
|
|
|
+}
|