|
@@ -0,0 +1,55 @@
|
|
|
+diff -Naur linux-4.7.3/arch/avr32/boards/grasshopper/setup.c linux-4.7.3.grasshopper/arch/avr32/boards/grasshopper/setup.c
|
|
|
+--- linux-4.7.3/arch/avr32/boards/grasshopper/setup.c 2016-09-14 10:48:53.403638569 +0200
|
|
|
|
|
|
+@@ -129,6 +129,28 @@
|
|
|
+ };
|
|
|
+ #endif
|
|
|
+
|
|
|
++/* I2C/TWI */
|
|
|
++#ifdef CONFIG_I2C
|
|
|
++static struct i2c_gpio_platform_data i2c_gpio_data = {
|
|
|
++ .sda_pin = GPIO_PIN_PA(6),
|
|
|
++ .scl_pin = GPIO_PIN_PA(7),
|
|
|
++ .sda_is_open_drain = 1,
|
|
|
++ .scl_is_open_drain = 1,
|
|
|
++ .udelay = 2, /* close to 100 kHz */
|
|
|
++};
|
|
|
++
|
|
|
++static struct platform_device i2c_gpio_device = {
|
|
|
++ .name = "i2c-gpio",
|
|
|
++ .id = 0,
|
|
|
++ .dev = {
|
|
|
++ .platform_data = &i2c_gpio_data,
|
|
|
++ },
|
|
|
++};
|
|
|
++
|
|
|
++static struct i2c_board_info i2c_info[] = {
|
|
|
++};
|
|
|
++#endif
|
|
|
++
|
|
|
+ /* MCI */
|
|
|
+ #ifdef CONFIG_MMC_ATMELMCI
|
|
|
+ static struct mci_platform_data __initdata mci0_data = {
|
|
|
+@@ -168,6 +190,22 @@
|
|
|
+ ATMEL_LCDC_PRI_CONTROL | ATMEL_LCDC_PRI_24BIT);
|
|
|
+ #endif
|
|
|
+
|
|
|
++ // I2C / TWI
|
|
|
++#ifdef CONFIG_I2C
|
|
|
++ /* all these i2c/smbus pins should have external pullups for
|
|
|
++ * open-drain sharing among all I2C devices. SDA and SCL do;
|
|
|
++ * PB28/EXTINT3 doesn't; it should be SMBALERT# (for PMBus),
|
|
|
++ * but it's not available off-board.
|
|
|
++ */
|
|
|
++ at32_select_periph(GPIO_PIOB_BASE, 1 << 28, 0, AT32_GPIOF_PULLUP);
|
|
|
++ 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));
|
|
|
++#endif
|
|
|
++
|
|
|
+ #ifdef CONFIG_MMC_ATMELMCI
|
|
|
+ // at32_add_device_mci(0, &mci0_data); /* MMC/SD */
|
|
|
+ #endif
|