2 * linux/arch/arm/mach-sprd/gpio.c
4 * Generic SPRD GPIO handling
6 * Author: Yingchun Li(yingchun.li@spreadtrum.com)
7 * Created: March 10, 2010
8 * Copyright: Spreadtrum Inc.
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2 as
12 * published by the Free Software Foundation.
15 #include <asm/arch/gpio.h>
16 #include <asm/arch/gpio_phy.h>
17 #include <asm/arch/sprd_reg.h>
18 #include <asm/arch/gpio_reg_v0.h>
19 #include <asm/arch/asm_generic_gpio.h>
20 #include <asm/arch/chip_drv_common_io.h>
23 #define GPO_TRI 0xFFFF
27 #define GPO_DATA 0xFFFF
32 enum gpio_section_type gpio_type;
43 #define INVALID_REG (~(u32)0)
45 //static struct gpio_irq_map gpio_irq_table[NR_GPIO_IRQS];
48 static void __get_gpio_base_info (u32 gpio_id, struct gpio_info *info)
52 struct gpio_section *section_table;
54 section_table = gpio_get_section_table (&table_size);
55 BUG_ON((gpio_id >= GPIO_MAX_PIN_NUM) || (table_size <= 0));
58 info->base_addr = __get_base_addr (gpio_id);
59 info->bit_num = __get_bit_num (gpio_id);
60 info->die = __get_gpio_die(gpio_id);
62 for (i = 0; i < table_size; i++) {
63 if (section_table[i].page_base == info->base_addr) {
64 if (section_table[i].page_size > info->bit_num) {
65 info->gpio_type = section_table[i].section_type;
72 info->gpio_type = GPIO_SECTION_INVALID;
79 static void __gpio_set_dir (struct gpio_info * info, int dir)
84 reg_addr = info->base_addr;
86 switch (info->gpio_type) {
87 case GPIO_SECTION_GPI:
89 WARN(1, "cannot set dir output with GPI");
93 case GPIO_SECTION_GPO:
95 WARN(1, "cannot set dir input with GPO");
99 case GPIO_SECTION_GPIO:
100 reg_addr += GPIO_DIR;
102 case GPIO_SECTION_INVALID:
104 WARN(1, " the GPIO_ID is Invalid in this chip");
108 value = gpio_reg_get(reg_addr, info->die);
111 value |= 1 << info->bit_num;
113 value &= ~(1 << info->bit_num);
114 gpio_reg_set(reg_addr, info->die, value);
118 get data register's offset
120 static u32 __gpio_get_data_reg_offs (struct gpio_info *info)
124 switch (info->gpio_type) {
125 case GPIO_SECTION_GPI:
126 offset_addr = GPI_DATA;
128 case GPIO_SECTION_GPO:
129 offset_addr = GPO_DATA;
131 case GPIO_SECTION_GPIO:
132 offset_addr = GPIO_DATA;
134 case GPIO_SECTION_INVALID:
136 pr_err("the GPIO_ID is Invalid in this chip");
144 static int __gpio_get_pin_data (struct gpio_info *info)
149 reg_addr = info->base_addr;
151 offset_addr = __gpio_get_data_reg_offs (info);
153 if (offset_addr != INVALID_REG) {
154 reg_addr += offset_addr;
155 return ((gpio_reg_get(reg_addr, info->die) & (1<<info->bit_num))>>info->bit_num);
160 static u32 __gpio_get_data_mask_reg_offs (struct gpio_info *info)
164 switch (info->gpio_type) {
165 case GPIO_SECTION_GPI:
166 offset_addr = GPI_DMSK;
168 case GPIO_SECTION_GPO:
169 offset_addr = GPO_TRI;
171 case GPIO_SECTION_GPIO:
172 offset_addr = GPIO_DMSK;
174 case GPIO_SECTION_INVALID:
176 pr_err ("the GPIO_ID is Invalid in this chip");
185 if the data register can be access, return ture, else return false;
187 static int __gpio_get_data_mask (struct gpio_info *info)
193 reg_addr = info->base_addr;
195 offset_addr = __gpio_get_data_mask_reg_offs(info);
196 if (offset_addr != INVALID_REG) {
197 reg_addr += offset_addr;
199 GPIO_DBG("gpio_addr %x data mask :%x\r\n", info->base_addr,
200 gpio_reg_get(reg_addr, info->die));
202 value = gpio_reg_get(reg_addr, info->die);
203 return ( value & (1<< info->bit_num)) ? true : false;
209 static int __gpio_get_dir (struct gpio_info *info)
214 reg_addr = info->base_addr;
216 switch (info->gpio_type) {
217 case GPIO_SECTION_GPI:
220 case GPIO_SECTION_GPO:
223 case GPIO_SECTION_GPIO:
224 reg_addr += GPIO_DIR;
227 case GPIO_SECTION_INVALID:
229 pr_warning("[GPIO_DRV]the GPIO_ID is Invalid in this chip");
234 value = gpio_reg_get(reg_addr, info->die) & (1<< info->bit_num);
235 return value ? true: false;
238 static void __gpio_set_pin_data (struct gpio_info *info ,int b_on)
244 reg_addr = info->base_addr;
246 offset_addr = __gpio_get_data_reg_offs (info);
247 if (offset_addr == INVALID_REG)
250 reg_addr += offset_addr;
252 value = gpio_reg_get(reg_addr, info->die);
254 value |= 1 << info->bit_num;
256 value &= ~(1 << info->bit_num);
257 gpio_reg_set(reg_addr, info->die, value);
261 set data mask, the gpio data register can be access
263 static void __gpio_set_data_mask (struct gpio_info *info, int b_on)
269 reg_addr = info->base_addr;
270 offset_addr = __gpio_get_data_mask_reg_offs(info);
271 if (offset_addr != INVALID_REG) {
272 reg_addr += offset_addr;
274 value = gpio_reg_get(reg_addr, info->die);
276 value |= 1 << info->bit_num;
278 value &= ~(1 << info->bit_num);
279 gpio_reg_set(reg_addr, info->die, value);
281 GPIO_DBG("After setting gpio_addr %x data mask :%x\r\n", reg_addr,
282 gpio_reg_get(reg_addr, info->die));
288 int sprd_gpio_direction_output(struct gpio_chip *chip,
289 unsigned offset, int value)
291 unsigned gpio_id = offset;
292 struct gpio_info gpio_info;
294 __get_gpio_base_info (gpio_id, &gpio_info);
295 __gpio_set_dir(&gpio_info, 1);
296 __gpio_set_pin_data(&gpio_info, value);
300 int sprd_gpio_direction_input(struct gpio_chip *chip, unsigned offset)
302 unsigned gpio_id = offset;
303 struct gpio_info gpio_info;
305 __get_gpio_base_info (gpio_id, &gpio_info);
306 __gpio_set_dir(&gpio_info, 0);
313 int sprd_gpio_get(struct gpio_chip *chip, unsigned offset)
315 unsigned gpio_id = offset;
316 struct gpio_info gpio_info;
318 __get_gpio_base_info (gpio_id, &gpio_info);
320 if (!__gpio_get_data_mask (&gpio_info)) {
321 WARN(1, "GPIO_%d data mask hasn't been opened!\n", gpio_id);
324 if (__gpio_get_dir (&gpio_info))
326 WARN(1, "[GPIO_DRV]GPIO_GetValue: GPIO_%d should be input port!\n", gpio_id);
329 return __gpio_get_pin_data (&gpio_info);
335 * Set output GPIO level
337 void sprd_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
339 struct gpio_info gpio_info;
340 u32 gpio_id = offset;
342 BUG_ON (gpio_id >= GPIO_MAX_PIN_NUM);
344 __get_gpio_base_info (gpio_id, &gpio_info);
347 if (!__gpio_get_data_mask (&gpio_info))
349 WARN(1, "GPIO_%d data mask no opened!", gpio_id);
353 if (!__gpio_get_dir (&gpio_info)) {
354 WARN(1, "GPIO_%d dir wrong!can't set input value", gpio_id);
358 __gpio_set_pin_data (&gpio_info, value);
360 GPIO_DBG("gpio_%d setting :%x \n", gpio_id, value);
363 int sprd_gpio_request(struct gpio_chip *chip, unsigned offset)
365 unsigned gpio_id = offset;
366 struct gpio_info gpio_info;
368 GPIO_DBG("request gpio_%d\r\n", gpio_id);
369 __get_gpio_base_info (gpio_id, &gpio_info);
371 GPIO_DBG("gpio info, pin is :%d, base addr :%x, bit num :%d, type :%d\r\n", gpio_id,
372 gpio_info.base_addr, gpio_info.bit_num, gpio_info.gpio_type);
373 GPIO_DBG("ture is %d, false is %d\n", true, false);
374 __gpio_set_data_mask (&gpio_info, true);
379 void sprd_gpio_free(struct gpio_chip *chip, unsigned offset)
381 unsigned gpio_id = offset;
382 struct gpio_info gpio_info;
384 if (gpio_id > GPIO_MAX_PIN_NUM) {
385 WARN(1, KERN_WARNING"gpio number is too larger:%d\r\n", gpio_id);
389 __get_gpio_base_info (gpio_id, &gpio_info);
390 __gpio_set_data_mask (&gpio_info, false);
396 static int sprd_gpio_to_irq(struct gpio_chip *chip, unsigned offset)
400 for (i = 0; i < NR_GPIO_IRQS; i++) {
401 if (gpio_irq_table[i].gpio_id == offset)
405 if (i >= NR_GPIO_IRQS)
407 return gpio_irq_table[i].irq_num;
410 int irq_to_gpio(unsigned long irq)
414 for (i = 0; i < NR_GPIO_IRQS; i++) {
415 if (gpio_irq_table[i].irq_num == irq)
419 if (i >= NR_GPIO_IRQS)
421 return gpio_irq_table[i].gpio_id;
423 EXPORT_SYMBOL(irq_to_gpio);
425 static struct gpio_chip sprd_gpio_chip = {
426 .label = "sc8800s-gpio",
427 .direction_input = sprd_gpio_direction_input,
428 .direction_output = sprd_gpio_direction_output,
429 .get = sprd_gpio_get,
430 .set = sprd_gpio_set,
431 .request = sprd_gpio_request,
432 .free = sprd_gpio_free,
433 .to_irq = sprd_gpio_to_irq,
435 .ngpio = GPIO_MAX_PIN_NUM,
438 static u32 __gpio_get_int_mask_addr (struct gpio_info *info)
442 switch (info->gpio_type) {
443 case GPIO_SECTION_GPI:
444 offset_addr = GPI_IE;
446 case GPIO_SECTION_GPO:
447 WARN(1, "this opretion can not belong to GPO");
450 case GPIO_SECTION_GPIO:
451 offset_addr = GPIO_IE;
454 case GPIO_SECTION_INVALID:
456 WARN (1, "the GPIO_ID is Invalid in this chip");
465 static void __gpio_enable_irq (struct gpio_info *info)
472 reg_addr = info->base_addr;
473 offset_addr = __gpio_get_int_mask_addr (info);
474 if (offset_addr != INVALID_REG) {
475 reg_addr += offset_addr;
476 local_irq_save(flags);
477 value = gpio_reg_get(reg_addr, info->die);
478 value |= 1 << info->bit_num;
479 gpio_reg_set(reg_addr, info->die, value);
480 local_irq_restore(flags);
486 static void __gpio_disable_irq (struct gpio_info *info)
493 reg_addr = info->base_addr;
494 offset_addr = __gpio_get_int_mask_addr (info);
496 if (offset_addr != INVALID_REG) {
497 reg_addr += offset_addr;
498 local_irq_save(flags);
499 value = gpio_reg_get(reg_addr, info->die);
500 value &= ~ (1 << info->bit_num);
501 gpio_reg_set(reg_addr, info->die, value);
502 local_irq_restore(flags);
509 static void __gpio_clear_irq_status (struct gpio_info *info)
515 reg_addr = info->base_addr;
517 switch (info->gpio_type) {
518 case GPIO_SECTION_GPI:
521 case GPIO_SECTION_GPO:
522 GPIO_DBG("this opretion can not belong to GPO");
524 case GPIO_SECTION_GPIO:
527 case GPIO_SECTION_INVALID:
529 GPIO_DBG("the GPIO_ID is Invalid in this chip");
534 local_irq_save(flags);
535 value = gpio_reg_get(reg_addr, info->die);
536 value &= ~ (1 << info->bit_num);
537 value |= 1 << info->bit_num;
538 gpio_reg_set(reg_addr, info->die, value);
541 static int __gpio_get_int_status (struct gpio_info *info)
546 reg_addr = info->base_addr;
548 switch (info->gpio_type) {
549 case GPIO_SECTION_GPI:
552 case GPIO_SECTION_GPO:
553 WARN(1, "The corresponding reg of this GPIO_ID is a GPO! No Intr!");
556 case GPIO_SECTION_GPIO:
557 reg_addr += GPIO_MIS;
559 case GPIO_SECTION_INVALID:
561 WARN(1, "the GPIO_ID is Invalid in this chip");
565 value = gpio_reg_get(reg_addr, info->die);
567 return ( value & (1 << info->bit_num)) ? true : false;
570 static void __gpio_set_int_type (struct gpio_info *info, int type)
572 if (info->gpio_type == GPIO_SECTION_GPI) {
574 case IRQ_TYPE_LEVEL_HIGH: // detect high level.
575 gpio_reg_or( (info->base_addr + GPI_IEV), info->die,
576 (0x1 << info->bit_num));
579 case IRQ_TYPE_LEVEL_LOW: // detect low level.
580 gpio_reg_and( (info->base_addr + GPI_IEV), info->die,
581 ~ (0x1 << info->bit_num));
584 case IRQ_TYPE_EDGE_BOTH: // detect the rising edges and falling edges.
585 case IRQ_TYPE_EDGE_RISING: // detect the rising edges.
586 case IRQ_TYPE_EDGE_FALLING:
588 WARN(1, "The Irq type is invalid for GPI. \n");
591 } else if (info->gpio_type == GPIO_SECTION_GPIO) {
593 case IRQ_TYPE_LEVEL_HIGH: // detect high level.
594 gpio_reg_or( (info->base_addr + GPIO_IS), info->die, (0x1 << info->bit_num));
595 gpio_reg_and(info->base_addr + GPIO_IBE, info->die, ~ (0x1 << info->bit_num));
596 gpio_reg_or( (info->base_addr + GPIO_IEV), info->die, (0x1 << info->bit_num));
599 case IRQ_TYPE_LEVEL_LOW: // detect low level.
600 gpio_reg_or( (info->base_addr + GPIO_IS), info->die, (0x1 << info->bit_num));
601 gpio_reg_and(info->base_addr + GPIO_IBE, info->die, ~ (0x1 << info->bit_num));
602 gpio_reg_and( (info->base_addr + GPIO_IEV), info->die, ~(0x1 << info->bit_num));
605 case IRQ_TYPE_EDGE_BOTH: // detect the rising edges and falling edges.
606 gpio_reg_and( (info->base_addr + GPIO_IS), info->die, ~(0x1 << info->bit_num));
607 gpio_reg_or(info->base_addr + GPIO_IBE, info->die, (0x1 << info->bit_num));
608 gpio_reg_and( (info->base_addr + GPIO_IEV), info->die, ~(0x1 << info->bit_num));
611 case IRQ_TYPE_EDGE_RISING: // detect the rising edges.
612 gpio_reg_and( (info->base_addr + GPIO_IS), info->die, ~(0x1 << info->bit_num));
613 gpio_reg_and(info->base_addr + GPIO_IBE, info->die, ~ (0x1 << info->bit_num));
614 gpio_reg_or( (info->base_addr + GPIO_IEV), info->die, (0x1 << info->bit_num));
617 case IRQ_TYPE_EDGE_FALLING:
618 gpio_reg_and( (info->base_addr + GPIO_IS), info->die, ~(0x1 << info->bit_num));
619 gpio_reg_and(info->base_addr + GPIO_IBE, info->die, ~ (0x1 << info->bit_num));
620 gpio_reg_and( (info->base_addr + GPIO_IEV), info->die, ~(0x1 << info->bit_num));
623 WARN(1, "fault irq type \r\n");
627 WARN(1, "the gpio type is Invalid for irq\r\n");
633 The GPI module can do handware debouce, the max period is 255ms,
635 if your application need debounce time larger than that, please use software
638 void gpio_set_hw_debounce (unsigned int gpio, u8 period)
642 struct gpio_info gpio_info;
645 __get_gpio_base_info (gpio, &gpio_info);
646 if (gpio_info.gpio_type != GPIO_SECTION_GPI) {
647 WARN(1, "GPIO_%d is not in GPI\r\n", gpio);
651 reg_addr = gpio_info.base_addr;
652 reg_addr += (GPI_0CTRL+ (gpio_info.bit_num << 2));
654 local_irq_save(flags);
657 GPIO_REG_OR (reg_addr, GPI_DEBOUNCE_BIT);
658 GPIO_REG_SET (reg_addr, (GPIO_REG32 (reg_addr) & 0xFF00) +debounce_period);
660 gpio_reg_or(reg_addr, gpio_info.die, GPI_DEBOUNCE_BIT);
661 value = (gpio_reg_get(reg_addr, gpio_info.die) & 0xFF00) + period;
662 gpio_reg_set(reg_addr, gpio_info.die, value);
663 } else {// not recommend
664 //GPIO_REG_AND (reg_addr, ~GPI_DEBOUNCE_BIT); //bypass mode
665 gpio_reg_and(reg_addr, gpio_info.die, ~GPI_DEBOUNCE_BIT);
667 local_irq_restore(flags);
670 EXPORT_SYMBOL(gpio_set_hw_debounce);
673 generate the trig_start pulse for GPI interrupt;
675 static void __gpio_trig_detect (struct gpio_info *info)
681 reg_addr = info->base_addr;
683 switch (info->gpio_type) {
684 case GPIO_SECTION_GPI:
685 reg_addr += GPI_TRIG;
688 case GPIO_SECTION_GPO:
689 case GPIO_SECTION_GPIO:
690 GPIO_DBG("[GPIO_DRV]this opretion can not belong to GPO/GPIO");
694 case GPIO_SECTION_INVALID:
696 GPIO_DBG ("[GPIO_DRV]the GPIO_ID is Invalid in this chip");
701 local_irq_save(flags);
703 value = gpio_reg_get(reg_addr, info->die) & ~(1 << info->bit_num);
704 value |= 1 << info->bit_num;
705 gpio_reg_set(reg_addr, info->die, value);
707 local_irq_restore(flags);
708 //GPIO_REG_SET (reg_addr, ( (GPIO_REG32 (reg_addr) & ~ (1<<pGpio_info->bit_num)) | (value<<pGpio_info->bit_num)));
713 void gpio_enable_gpi_interupt (struct gpio_info *info)
716 switch (info->gpio_type) {
717 case GPIO_SECTION_GPI:
718 __gpio_enable_irq (info);
719 __gpio_trig_detect (info);
721 case GPIO_SECTION_GPO:
722 case GPIO_SECTION_GPIO:
731 //EXPORT_SYMBOL(gpio_enable_gpi_interupt);
733 static void sprd_ack_gpio_irq(unsigned int irq)
736 struct gpio_irq_map *map= get_irq_chip_data(irq);
737 struct gpio_info gpio_info;
740 if (gpio >= GPIO_MAX_PIN_NUM ) {
741 pr_warning(" [%s] error gpio %d\n", __FUNCTION__, gpio);
744 GPIO_DBG("ack irq gpio %d irq %d", gpio, irq);
746 __get_gpio_base_info (gpio, &gpio_info);
747 __gpio_clear_irq_status(&gpio_info);
750 static void sprd_mask_gpio_irq(unsigned int irq)
753 struct gpio_irq_map *map= get_irq_chip_data(irq);
754 struct gpio_info gpio_info;
757 if (gpio >= GPIO_MAX_PIN_NUM ) {
758 pr_warning(" [%s] error gpio %d\n", __func__, gpio);
762 GPIO_DBG("mask gpio %d irq %d", gpio, irq);
763 __get_gpio_base_info (gpio, &gpio_info);
764 __gpio_disable_irq (&gpio_info);
768 static void sprd_unmask_gpio_irq(unsigned int irq)
771 struct gpio_info gpio_info;
772 struct gpio_irq_map *map= get_irq_chip_data(irq);
775 if (gpio >= GPIO_MAX_PIN_NUM ) {
776 pr_warning(" [%s] error gpio %d\n", __FUNCTION__, gpio);
780 GPIO_DBG("unmask gpio %d irq %d", gpio, irq);
781 __get_gpio_base_info (gpio, &gpio_info);
782 __gpio_enable_irq (&gpio_info);
784 if(gpio_info.gpio_type == GPIO_SECTION_GPI)
785 __gpio_trig_detect (&gpio_info);
789 static int sprd_gpio_irq_type(unsigned int irq, unsigned int type)
792 struct gpio_irq_map *map= get_irq_chip_data(irq);
793 struct gpio_info gpio_info;
796 if (gpio >= GPIO_MAX_PIN_NUM ) {
797 pr_warning(" [%s] error gpio %d\n", __FUNCTION__, gpio);
801 __get_gpio_base_info (gpio, &gpio_info);
803 __gpio_set_int_type(&gpio_info, type);
805 if (type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH))
806 __set_irq_handler_unlocked(irq, handle_level_irq);
807 else if (type & (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING))
808 __set_irq_handler_unlocked(irq, handle_edge_irq);
812 static void sprd_disable_gpio_irq(unsigned int irq)
814 sprd_mask_gpio_irq(irq);
816 static struct irq_chip sprd_muxed_gpio_chip = {
818 .ack = sprd_ack_gpio_irq,
819 .mask = sprd_mask_gpio_irq,
820 .unmask = sprd_unmask_gpio_irq,
821 .set_type = sprd_gpio_irq_type,
822 .disable = sprd_disable_gpio_irq,
825 static int gpio_get_int_status(unsigned int gpio)
827 struct gpio_info gpio_info;
829 __get_gpio_base_info (gpio, &gpio_info);
830 return __gpio_get_int_status (&gpio_info);
835 static void sprd_gpio_demux_handler(unsigned int irq, struct irq_desc *desc)
839 for (i = 0; i < NR_GPIO_IRQS; i++) {
840 if (gpio_irq_table[i].gpio_id == GPIO_INVALID_ID) {
843 if (gpio_get_int_status(gpio_irq_table[i].gpio_id)) {
844 generic_handle_irq(gpio_irq_table[i].irq_num);
848 static void sprd_gpio_irq_init(void)
853 for(i = 0; i < NR_GPIO_IRQS; i++) {
854 gpio_irq_table[i].gpio_id= GPIO_INVALID_ID;
856 for (irq = GPIO_IRQ_START; irq < (GPIO_IRQ_START + NR_GPIO_IRQS); irq++) {
857 set_irq_chip(irq, &sprd_muxed_gpio_chip);
858 set_irq_flags(irq, IRQF_VALID | IRQF_PROBE);
861 set_irq_chained_handler(IRQ_GPIO_INT, sprd_gpio_demux_handler);
862 set_irq_chained_handler(IRQ_ANA_GPIO_INT, sprd_gpio_demux_handler);
866 allocate an irq for gpio
868 __must_check int sprd_alloc_gpio_irq(unsigned gpio)
872 struct gpio_info gpio_info;
875 __get_gpio_base_info (gpio, &gpio_info);
877 // find a free record
878 for (i = 0; i< NR_GPIO_IRQS; i++) {
879 if (gpio_irq_table[i].gpio_id == gpio) {
880 pr_warning("irq for GPIO_%d has been alloc !\n", gpio);
885 for(i = 0; i < NR_GPIO_IRQS; i++) {
886 if (gpio_irq_table[i].gpio_id == GPIO_INVALID_ID)
890 if (i >= NR_GPIO_IRQS) {
891 // No free item in the table.
894 local_irq_save(flags);
895 irq = GPIO_IRQ_START + i;
896 gpio_irq_table[i].gpio_id = gpio;
897 gpio_irq_table[i].irq_num = irq;
899 set_irq_chip_data(irq, &gpio_irq_table[i]);
900 local_irq_restore(flags);
901 __gpio_clear_irq_status(&gpio_info);
902 if (gpio_info.gpio_type == GPIO_SECTION_GPI)
903 __gpio_trig_detect (&gpio_info);
908 EXPORT_SYMBOL(sprd_alloc_gpio_irq);
910 void sprd_free_gpio_irq(int irq)
915 local_irq_save(flags);
916 for (i = 0; i < NR_GPIO_IRQS; i++) {
917 if (gpio_irq_table[i].irq_num == irq) {
918 set_irq_chip_data(irq, NULL);
919 gpio_irq_table[i].gpio_id = GPIO_INVALID_ID;
923 local_irq_restore(flags);
925 EXPORT_SYMBOL(sprd_free_gpio_irq);
927 __init void sprd_gpio_init(void)
929 //enable gpio bank 0~10, that is, all 176 gpio
930 //__raw_writel(0x7fff, GR_GEN2);
931 //CHIP_REG_OR ( (GR_GEN0), (GEN0_GPIO_EN | GEN0_GPIO_RTC_EN));
932 __raw_bits_or (GEN0_GPIO_EN | GEN0_GPIO_RTC_EN, GR_GEN0);
933 ANA_REG_OR (ANA_AGEN,AGEN_RTC_GPIO_EN);
935 ANA_REG_OR (ANA_AGEN,AGEN_GPIO_EN);
937 gpiochip_add(&sprd_gpio_chip);
939 sprd_gpio_irq_init();
942 void sprd_gpio_init(void)
944 #if defined(CONFIG_SPX15)
945 REG32(REG_AON_APB_APB_EB0) |= BIT_AON_GPIO_EB;
947 REG32(REG_AON_APB_APB_EB0) |= BIT_GPIO_EB;
948 #if !(defined(CONFIG_ADIE_SC2723S)||defined(CONFIG_ADIE_SC2723))
949 ANA_REG_OR(ANA_REG_GLB_ARM_MODULE_EN, BIT_ANA_GPIO_EN);