Changeset 34174


Ignore:
Timestamp:
2012-11-12T20:27:30+01:00 (5 years ago)
Author:
luka
Message:

cns3xxx: merge gpio patches

Location:
trunk/target/linux/cns3xxx/patches-3.3
Files:
1 deleted
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/cns3xxx/patches-3.3/095-gpio_support.patch

    r34169 r34174  
    11--- a/arch/arm/mach-cns3xxx/cns3420vb.c 
    22+++ b/arch/arm/mach-cns3xxx/cns3420vb.c 
    3 @@ -213,7 +213,7 @@ static struct map_desc cns3420_io_desc[] 
     3@@ -198,6 +198,10 @@ static void __init cns3420_init(void) 
     4  
     5        cns3xxx_ahci_init(); 
     6        cns3xxx_sdhci_init(); 
     7+       cns3xxx_gpio_init( 0, 32, CNS3XXX_GPIOA_BASE_VIRT, IRQ_CNS3XXX_GPIOA, 
     8+               NR_IRQS_CNS3XXX); 
     9+       cns3xxx_gpio_init(32, 32, CNS3XXX_GPIOB_BASE_VIRT, IRQ_CNS3XXX_GPIOB, 
     10+               NR_IRQS_CNS3XXX + 32); 
     11  
     12        pm_power_off = cns3xxx_power_off; 
     13 } 
     14@@ -213,7 +217,7 @@ static struct map_desc cns3420_io_desc[] 
    415  
    516 static void __init cns3420_map_io(void) 
     
    1223--- a/arch/arm/mach-cns3xxx/core.c 
    1324+++ b/arch/arm/mach-cns3xxx/core.c 
    14 @@ -21,6 +21,7 @@ 
    15  #include <asm/hardware/gic.h> 
    16  #include <asm/smp_twd.h> 
    17  #include <asm/hardware/cache-l2x0.h> 
    18 +#include <asm/gpio.h> 
    19  #include <mach/cns3xxx.h> 
    20  #include "core.h" 
    21   
    22 @@ -82,12 +83,73 @@ static struct map_desc cns3xxx_io_desc[] 
     25@@ -82,7 +82,7 @@ static struct map_desc cns3xxx_io_desc[] 
    2326        }, 
    2427 }; 
    2528  
    2629-void __init cns3xxx_map_io(void) 
    27 +static inline void gpio_line_config(u8 line, u32 direction) 
    28 +{ 
    29 +       u32 reg; 
    30 +       if (direction) { 
    31 +               if (line < 32) { 
    32 +                       reg = __raw_readl(CNS3XXX_GPIOA_BASE_VIRT + CNS3XXX_GPIO_DIR); 
    33 +                       reg |= (1 << line); 
    34 +                       __raw_writel(reg, CNS3XXX_GPIOA_BASE_VIRT + CNS3XXX_GPIO_DIR); 
    35 +               } else { 
    36 +                       reg = __raw_readl(CNS3XXX_GPIOB_BASE_VIRT + CNS3XXX_GPIO_DIR); 
    37 +                       reg |= (1 << (line - 32)); 
    38 +                       __raw_writel(reg, CNS3XXX_GPIOB_BASE_VIRT + CNS3XXX_GPIO_DIR); 
    39 +               } 
    40 +       } else { 
    41 +               if (line < 32) { 
    42 +                       reg = __raw_readl(CNS3XXX_GPIOA_BASE_VIRT + CNS3XXX_GPIO_DIR); 
    43 +                       reg &= ~(1 << line); 
    44 +                       __raw_writel(reg, CNS3XXX_GPIOA_BASE_VIRT + CNS3XXX_GPIO_DIR); 
    45 +               } else { 
    46 +                       reg = __raw_readl(CNS3XXX_GPIOB_BASE_VIRT + CNS3XXX_GPIO_DIR); 
    47 +                       reg &= ~(1 << (line - 32)); 
    48 +                       __raw_writel(reg, CNS3XXX_GPIOB_BASE_VIRT + CNS3XXX_GPIO_DIR); 
    49 +               } 
    50 +       } 
    51 +} 
    52 + 
    53 +static int cns3xxx_gpio_direction_input(struct gpio_chip *chip, unsigned gpio) 
    54 +{ 
    55 +       gpio_line_config(gpio, CNS3XXX_GPIO_IN); 
    56 +       return 0; 
    57 +} 
    58 + 
    59 +static int cns3xxx_gpio_direction_output(struct gpio_chip *chip, unsigned gpio, int level) 
    60 +{ 
    61 +       gpio_line_set(gpio, level); 
    62 +       gpio_line_config(gpio, CNS3XXX_GPIO_OUT); 
    63 +       return 0; 
    64 +} 
    65 + 
    66 +static int cns3xxx_gpio_get_value(struct gpio_chip *chip, unsigned gpio) 
    67 +{ 
    68 +       return gpio_get_value(gpio); 
    69 +} 
    70 + 
    71 +static void cns3xxx_gpio_set_value(struct gpio_chip *chip, unsigned gpio, int value) 
    72 +{ 
    73 +       gpio_set_value(gpio, value); 
    74 +} 
    75 + 
    76 +static struct gpio_chip cns3xxx_gpio_chip = { 
    77 +       .label                  = "CNS3XXX_GPIO_CHIP", 
    78 +       .direction_input        = cns3xxx_gpio_direction_input, 
    79 +       .direction_output       = cns3xxx_gpio_direction_output, 
    80 +       .get                    = cns3xxx_gpio_get_value, 
    81 +       .set                    = cns3xxx_gpio_set_value, 
    82 +       .base                   = 0, 
    83 +       .ngpio                  = 64, 
    84 +}; 
    85 + 
    8630+void __init cns3xxx_common_init(void) 
    8731 { 
    8832 #ifdef CONFIG_LOCAL_TIMERS 
    8933        twd_base = (void __iomem *) CNS3XXX_TC11MP_TWD_BASE_VIRT; 
    90  #endif 
    91         iotable_init(cns3xxx_io_desc, ARRAY_SIZE(cns3xxx_io_desc)); 
    92 + 
    93 +       gpiochip_add(&cns3xxx_gpio_chip); 
    94  } 
    95   
    96  /* used by entry-macro.S */ 
    9734--- a/arch/arm/mach-cns3xxx/core.h 
    9835+++ b/arch/arm/mach-cns3xxx/core.h 
     
    10845--- a/arch/arm/Kconfig 
    10946+++ b/arch/arm/Kconfig 
    110 @@ -366,6 +366,7 @@ config ARCH_CLPS711X 
     47@@ -366,6 +366,8 @@ config ARCH_CLPS711X 
    11148 config ARCH_CNS3XXX 
    11249        bool "Cavium Networks CNS3XXX family" 
    11350        select CPU_V6K 
    114 +       select ARCH_WANT_OPTIONAL_GPIOLIB 
     51+       select ARCH_REQUIRE_GPIOLIB 
     52+       select GENERIC_IRQ_CHIP 
    11553        select GENERIC_CLOCKEVENTS 
    11654        select ARM_GIC 
    11755        select CLKDEV_LOOKUP 
     56--- a/arch/arm/mach-cns3xxx/Makefile 
     57+++ b/arch/arm/mach-cns3xxx/Makefile 
     58@@ -1,4 +1,4 @@ 
     59-obj-$(CONFIG_ARCH_CNS3XXX)             += core.o pm.o devices.o 
     60+obj-$(CONFIG_ARCH_CNS3XXX)             += core.o gpio.o pm.o devices.o 
     61 obj-$(CONFIG_PCI)                      += pcie.o 
     62 obj-$(CONFIG_MACH_CNS3420VB)           += cns3420vb.o 
     63 obj-$(CONFIG_SMP)                      += platsmp.o headsmp.o cns3xxx_fiq.o 
     64--- a/arch/arm/mach-cns3xxx/include/mach/cns3xxx.h 
     65+++ b/arch/arm/mach-cns3xxx/include/mach/cns3xxx.h 
     66@@ -627,7 +627,7 @@ int cns3xxx_cpu_clock(void); 
     67  
     68 #if !defined(NR_IRQS) || (NR_IRQS < NR_IRQS_CNS3XXX) 
     69 #undef NR_IRQS 
     70-#define NR_IRQS                                NR_IRQS_CNS3XXX 
     71+#define NR_IRQS                                (NR_IRQS_CNS3XXX + 64) 
     72 #endif 
     73  
     74 #endif /* __MACH_BOARD_CNS3XXX_H */ 
Note: See TracChangeset for help on using the changeset viewer.