Browse Source

add I2C support for AVR32 grasshopper board

Signed-off-by: Mario Haustein <mario.haustein@hrz.tu-chemnitz.de>
Mario Haustein 7 years ago
parent
commit
83f594381a

+ 55 - 0
target/avr32/grasshopper/patches/4.7.3/0003-grasshopper-enable-i2c-gpio.patch

@@ -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
++++ linux-4.7.3.grasshopper/arch/avr32/boards/grasshopper/setup.c	2016-09-14 11:40:15.735513299 +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

+ 1 - 0
target/linux/config/Config.in.i2c

@@ -23,6 +23,7 @@ config ADK_KERNEL_I2C_GPIO
 	select ADK_KERNEL_I2C_BOARDINFO
 	select ADK_KERNEL_I2C_ALGOBIT
 	default y if ADK_TARGET_SYSTEM_LINKSYS_NSLU2
+	default y if ADK_TARGET_SYSTEM_GRASSHOPPER
 	help
 
 config ADK_KERNEL_I2C_BCM2708