Changeset 33580


Ignore:
Timestamp:
2012-09-28T19:34:18+02:00 (5 years ago)
Author:
kaloz
Message:

Update board support for Gateworks Laguna Product family

Signed-off-by: Tim Harvey <tharvey@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/cns3xxx/patches-3.3/300-laguna_support.patch

    r33502 r33580  
    11--- /dev/null 
    22+++ b/arch/arm/mach-cns3xxx/laguna.c 
    3 @@ -0,0 +1,765 @@ 
     3@@ -0,0 +1,919 @@ 
    44+/* 
    55+ * Gateworks Corporation Laguna Platform 
     
    1313+ * Copyright 2011 Gateworks Corporation 
    1414+ *               Chris Lang <clang@gateworks.com> 
     15+ * Copyright 2012 Gateworks Corporation 
     16+ *               Tim Harvey <tharvey@gateworks.com> 
    1517+ * 
    1618+ * This file is free software; you can redistribute it and/or modify 
     
    2325+#include <linux/compiler.h> 
    2426+#include <linux/io.h> 
     27+#include <linux/gpio.h> 
    2528+#include <linux/dma-mapping.h> 
    2629+#include <linux/serial_core.h> 
     
    4952+#include "core.h" 
    5053+#include "devices.h" 
     54+ 
     55+#define ARRAY_AND_SIZE(x)       (x), ARRAY_SIZE(x) 
    5156+ 
    5257+// Config 1 Bitmap 
     
    100105+}; 
    101106+ 
    102 +static struct laguna_board_info laguna_info; 
     107+static struct laguna_board_info laguna_info __initdata; 
    103108+ 
    104109+/* 
     
    578583+ 
    579584+/* 
     585+ * GPIO 
     586+ */ 
     587+static struct platform_device laguna_gpio_dev = { 
     588+       .name = "GPIODEV", 
     589+       .id = -1, 
     590+}; 
     591+ 
     592+static struct gpio laguna_gpio_gw2391[] = { 
     593+       {   0, GPIOF_IN           , "*GPS_PPS" }, 
     594+       {   1, GPIOF_IN           , "*GSC_IRQ#" }, 
     595+       {   2, GPIOF_IN           , "*USB_FAULT#" }, 
     596+       {   5, GPIOF_OUT_INIT_LOW , "*USB0_PCI_SEL" }, 
     597+       {   6, GPIOF_OUT_INIT_HIGH, "*USB_VBUS_EN" }, 
     598+       {   7, GPIOF_OUT_INIT_LOW , "*USB1_PCI_SEL" }, 
     599+       {   8, GPIOF_OUT_INIT_HIGH, "*PERST#" }, 
     600+       {   9, GPIOF_OUT_INIT_LOW , "*FP_SER_EN#" }, 
     601+       { 100, GPIOF_IN           , "*USER_PB#" }, 
     602+       { 103, GPIOF_OUT_INIT_HIGH, "*V5_EN" }, 
     603+       { 108, GPIOF_IN           , "DIO0" }, 
     604+       { 109, GPIOF_IN           , "DIO1" }, 
     605+       { 110, GPIOF_IN           , "DIO2" }, 
     606+       { 111, GPIOF_IN           , "DIO3" }, 
     607+       { 112, GPIOF_IN           , "DIO4" }, 
     608+}; 
     609+ 
     610+static struct gpio laguna_gpio_gw2388[] = { 
     611+       {   0, GPIOF_IN           , "*GPS_PPS" }, 
     612+       {   1, GPIOF_IN           , "*GSC_IRQ#" }, 
     613+       {   3, GPIOF_IN           , "*USB_FAULT#" }, 
     614+       {   6, GPIOF_OUT_INIT_HIGH, "*USB_VBUS_EN" }, 
     615+       {   7, GPIOF_OUT_INIT_LOW , "*GSM_SEL0" }, 
     616+       {   8, GPIOF_OUT_INIT_LOW , "*GSM_SEL1" }, 
     617+       {   9, GPIOF_OUT_INIT_LOW , "*FP_SER_EN" }, 
     618+       { 100, GPIOF_OUT_INIT_HIGH, "*USER_PB#" }, 
     619+       { 108, GPIOF_IN           , "DIO0" }, 
     620+       { 109, GPIOF_IN           , "DIO1" }, 
     621+       { 110, GPIOF_IN           , "DIO2" }, 
     622+       { 111, GPIOF_IN           , "DIO3" }, 
     623+       { 112, GPIOF_IN           , "DIO4" }, 
     624+}; 
     625+ 
     626+static struct gpio laguna_gpio_gw2387[] = { 
     627+       {   0, GPIOF_IN           , "*GPS_PPS" }, 
     628+       {   1, GPIOF_IN           , "*GSC_IRQ#" }, 
     629+       {   2, GPIOF_IN           , "*USB_FAULT#" }, 
     630+       {   5, GPIOF_OUT_INIT_LOW , "*USB_PCI_SEL" }, 
     631+       {   6, GPIOF_OUT_INIT_HIGH, "*USB_VBUS_EN" }, 
     632+       {   7, GPIOF_OUT_INIT_LOW , "*GSM_SEL0" }, 
     633+       {   8, GPIOF_OUT_INIT_LOW , "*GSM_SEL1" }, 
     634+       {   9, GPIOF_OUT_INIT_LOW , "*FP_SER_EN" }, 
     635+       { 100, GPIOF_IN           , "*USER_PB#" }, 
     636+       { 103, GPIOF_OUT_INIT_HIGH, "*V5_EN" }, 
     637+       { 108, GPIOF_IN           , "DIO0" }, 
     638+       { 109, GPIOF_IN           , "DIO1" }, 
     639+       { 110, GPIOF_IN           , "DIO2" }, 
     640+       { 111, GPIOF_IN           , "DIO3" }, 
     641+       { 112, GPIOF_IN           , "DIO4" }, 
     642+       { 113, GPIOF_IN           , "DIO5" }, 
     643+}; 
     644+ 
     645+static struct gpio laguna_gpio_gw2384[] = { 
     646+       {   0, GPIOF_IN           , "*GSC_IRQ#" }, 
     647+       {   1, GPIOF_OUT_INIT_HIGH, "*USB_HST_VBUS_EN" }, 
     648+       {   2, GPIOF_IN           , "*USB_HST_FAULT#" }, 
     649+       {   5, GPIOF_IN           , "*USB_OTG_FAULT#" }, 
     650+       {   6, GPIOF_OUT_INIT_LOW , "*USB_HST_PCI_SEL" }, 
     651+       {   7, GPIOF_OUT_INIT_LOW , "*GSM_SEL0" }, 
     652+       {   8, GPIOF_OUT_INIT_LOW , "*GSM_SEL1" }, 
     653+       {   9, GPIOF_OUT_INIT_LOW , "*FP_SER_EN" }, 
     654+       {  12, GPIOF_OUT_INIT_LOW , "J10_DIOLED0" }, 
     655+       {  13, GPIOF_OUT_INIT_HIGH, "*I2CMUX_RST#" }, 
     656+       {  14, GPIOF_OUT_INIT_LOW , "J10_DIOLED1" }, 
     657+       {  15, GPIOF_OUT_INIT_LOW , "J10_DIOLED2" }, 
     658+       { 100, GPIOF_IN           , "*USER_PB#" }, 
     659+       { 103, GPIOF_OUT_INIT_HIGH, "V5_EN" }, 
     660+       { 108, GPIOF_IN           , "J9_DIOGSC0" }, 
     661+}; 
     662+ 
     663+static struct gpio laguna_gpio_gw2382[] = { 
     664+       {   0, GPIOF_IN           , "*GPS_PPS" }, 
     665+       {   1, GPIOF_IN           , "*GSC_IRQ#" }, 
     666+       {   2, GPIOF_OUT_INIT_HIGH, "*PCIE_RST#" }, 
     667+       {   3, GPIOF_IN           , "GPIO0" }, 
     668+       {   4, GPIOF_IN           , "GPIO1" }, 
     669+       {   9, GPIOF_OUT_INIT_HIGH, "*USB_VBUS_EN" }, 
     670+       {  10, GPIOF_OUT_INIT_HIGH, "*USB_PCI_SEL#" }, 
     671+       { 100, GPIOF_IN           , "DIO0" }, 
     672+       { 101, GPIOF_IN           , "DIO1" }, 
     673+}; 
     674+ 
     675+static struct gpio laguna_gpio_gw2380[] = { 
     676+       {   0, GPIOF_IN           , "*GPS_PPS" }, 
     677+       {   1, GPIOF_IN           , "*GSC_IRQ#" }, 
     678+       {   3, GPIOF_IN           , "GPIO0" }, 
     679+       {   8, GPIOF_IN           , "GPIO1" }, 
     680+       { 100, GPIOF_IN           , "DIO0" }, 
     681+       { 101, GPIOF_IN           , "DIO1" }, 
     682+       { 102, GPIOF_IN           , "DIO2" }, 
     683+       { 103, GPIOF_IN           , "DIO3" }, 
     684+}; 
     685+ 
     686+/* 
    580687+ * Initialization 
    581688+ */ 
    582 + 
    583689+static void __init laguna_init(void) 
    584690+{ 
     
    589695+       platform_device_register(&laguna_i2c_controller); 
    590696+ 
    591 +       i2c_register_board_info(0, laguna_i2c_devices, 
    592 +                       ARRAY_SIZE(laguna_i2c_devices)); 
     697+       i2c_register_board_info(0, ARRAY_AND_SIZE(laguna_i2c_devices)); 
    593698+ 
    594699+       pm_power_off = cns3xxx_power_off; 
     
    618723+       cns3xxx_common_init(); 
    619724+       cns3xxx_pcie_iotable_init(0x3); 
    620 +       iotable_init(laguna_io_desc, ARRAY_SIZE(laguna_io_desc)); 
     725+       iotable_init(ARRAY_AND_SIZE(laguna_io_desc)); 
    621726+       laguna_early_serial_setup(); 
     727+} 
     728+ 
     729+static int laguna_register_gpio(struct gpio *array, size_t num) 
     730+{ 
     731+       int i, err, ret; 
     732+ 
     733+       ret = 0; 
     734+       for (i = 0; i < num; i++, array++) { 
     735+               const char *label = array->label; 
     736+               if (label[0] == '*') 
     737+                       label++; 
     738+               err = gpio_request_one(array->gpio, array->flags, label); 
     739+               if (err) 
     740+                       ret = err; 
     741+               else { 
     742+                       err = gpio_export(array->gpio, array->label[0] != '*'); 
     743+               } 
     744+       } 
     745+       return ret; 
    622746+} 
    623747+ 
     
    730854+                               break; 
    731855+                       } 
    732 +                       spi_register_board_info(laguna_spi_devices, ARRAY_SIZE(laguna_spi_devices)); 
     856+                       spi_register_board_info(ARRAY_AND_SIZE(laguna_spi_devices)); 
    733857+               } 
    734858+ 
     
    742866+                */ 
    743867+ 
    744 +               if (strncmp(laguna_info.model, "GW2388", 6) == 0) { 
     868+               if ( (strncmp(laguna_info.model, "GW2388", 6) == 0) 
     869+                 || (strncmp(laguna_info.model, "GW2389", 6) == 0) ) 
     870+               { 
     871+                       // configure GPIO's 
     872+                       laguna_register_gpio(ARRAY_AND_SIZE(laguna_gpio_gw2388)); 
     873+                       // configure LED's 
    745874+                       laguna_gpio_leds_data.num_leds = 2; 
     875+               } else if (strncmp(laguna_info.model, "GW2387", 6) == 0) { 
     876+                       // configure GPIO's 
     877+                       laguna_register_gpio(ARRAY_AND_SIZE(laguna_gpio_gw2387)); 
     878+                       // configure LED's 
     879+                       laguna_gpio_leds_data.num_leds = 2; 
     880+               } else if (strncmp(laguna_info.model, "GW2384", 6) == 0) { 
     881+                       // configure GPIO's 
     882+                       laguna_register_gpio(ARRAY_AND_SIZE(laguna_gpio_gw2384)); 
     883+                       // configure LED's 
     884+                       laguna_gpio_leds_data.num_leds = 1; 
     885+               } else if (strncmp(laguna_info.model, "GW2382", 6) == 0) { 
     886+                       // configure GPIO's 
     887+                       laguna_register_gpio(ARRAY_AND_SIZE(laguna_gpio_gw2382)); 
     888+                       // configure LED's 
     889+                       laguna_gpio_leds[0].gpio = 107; 
     890+                       laguna_gpio_leds_data.num_leds = 1; 
    746891+               } else if (strncmp(laguna_info.model, "GW2380", 6) == 0) { 
     892+                       // configure GPIO's 
     893+                       laguna_register_gpio(ARRAY_AND_SIZE(laguna_gpio_gw2380)); 
     894+                       // configure LED's 
    747895+                       laguna_gpio_leds[0].gpio = 107; 
    748896+                       laguna_gpio_leds[1].gpio = 106; 
    749897+                       laguna_gpio_leds_data.num_leds = 2; 
     898+               } else if (strncmp(laguna_info.model, "GW2391", 6) == 0) { 
     899+                       // configure GPIO's 
     900+                       laguna_register_gpio(ARRAY_AND_SIZE(laguna_gpio_gw2391)); 
     901+                       // configure LED's 
     902+                       laguna_gpio_leds_data.num_leds = 2; 
    750903+               } 
    751904+               platform_device_register(&laguna_gpio_leds_device); 
     905+               platform_device_register(&laguna_gpio_dev); 
    752906+       } else { 
    753907+               // Do some defaults here, not sure what yet 
Note: See TracChangeset for help on using the changeset viewer.