Lines Matching refs:gpio_dev

42 	struct amd_gpio *gpio_dev = gpiochip_get_data(gc);  in amd_gpio_get_direction()  local
44 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_get_direction()
45 pin_reg = readl(gpio_dev->base + offset * 4); in amd_gpio_get_direction()
46 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_get_direction()
58 struct amd_gpio *gpio_dev = gpiochip_get_data(gc); in amd_gpio_direction_input() local
60 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_direction_input()
61 pin_reg = readl(gpio_dev->base + offset * 4); in amd_gpio_direction_input()
63 writel(pin_reg, gpio_dev->base + offset * 4); in amd_gpio_direction_input()
64 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_direction_input()
74 struct amd_gpio *gpio_dev = gpiochip_get_data(gc); in amd_gpio_direction_output() local
76 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_direction_output()
77 pin_reg = readl(gpio_dev->base + offset * 4); in amd_gpio_direction_output()
83 writel(pin_reg, gpio_dev->base + offset * 4); in amd_gpio_direction_output()
84 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_direction_output()
93 struct amd_gpio *gpio_dev = gpiochip_get_data(gc); in amd_gpio_get_value() local
95 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_get_value()
96 pin_reg = readl(gpio_dev->base + offset * 4); in amd_gpio_get_value()
97 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_get_value()
106 struct amd_gpio *gpio_dev = gpiochip_get_data(gc); in amd_gpio_set_value() local
108 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_set_value()
109 pin_reg = readl(gpio_dev->base + offset * 4); in amd_gpio_set_value()
114 writel(pin_reg, gpio_dev->base + offset * 4); in amd_gpio_set_value()
115 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_set_value()
125 struct amd_gpio *gpio_dev = gpiochip_get_data(gc); in amd_gpio_set_debounce() local
127 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_set_debounce()
128 pin_reg = readl(gpio_dev->base + offset * 4); in amd_gpio_set_debounce()
177 writel(pin_reg, gpio_dev->base + offset * 4); in amd_gpio_set_debounce()
178 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_set_debounce()
202 struct amd_gpio *gpio_dev = gpiochip_get_data(gc); in amd_gpio_dbg_show() local
222 for (bank = 0; bank < gpio_dev->hwbank_num; bank++) { in amd_gpio_dbg_show()
250 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_dbg_show()
251 pin_reg = readl(gpio_dev->base + i * 4); in amd_gpio_dbg_show()
252 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_dbg_show()
384 struct amd_gpio *gpio_dev = gpiochip_get_data(gc); in amd_gpio_irq_enable() local
388 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_irq_enable()
389 pin_reg = readl(gpio_dev->base + (d->hwirq)*4); in amd_gpio_irq_enable()
392 writel(pin_reg, gpio_dev->base + (d->hwirq)*4); in amd_gpio_irq_enable()
393 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_irq_enable()
401 struct amd_gpio *gpio_dev = gpiochip_get_data(gc); in amd_gpio_irq_disable() local
403 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_irq_disable()
404 pin_reg = readl(gpio_dev->base + (d->hwirq)*4); in amd_gpio_irq_disable()
407 writel(pin_reg, gpio_dev->base + (d->hwirq)*4); in amd_gpio_irq_disable()
408 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_irq_disable()
418 struct amd_gpio *gpio_dev = gpiochip_get_data(gc); in amd_gpio_irq_mask() local
420 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_irq_mask()
421 pin_reg = readl(gpio_dev->base + (d->hwirq)*4); in amd_gpio_irq_mask()
423 writel(pin_reg, gpio_dev->base + (d->hwirq)*4); in amd_gpio_irq_mask()
424 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_irq_mask()
432 struct amd_gpio *gpio_dev = gpiochip_get_data(gc); in amd_gpio_irq_unmask() local
434 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_irq_unmask()
435 pin_reg = readl(gpio_dev->base + (d->hwirq)*4); in amd_gpio_irq_unmask()
437 writel(pin_reg, gpio_dev->base + (d->hwirq)*4); in amd_gpio_irq_unmask()
438 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_irq_unmask()
446 struct amd_gpio *gpio_dev = gpiochip_get_data(gc); in amd_gpio_irq_set_wake() local
450 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_irq_set_wake()
451 pin_reg = readl(gpio_dev->base + (d->hwirq)*4); in amd_gpio_irq_set_wake()
458 writel(pin_reg, gpio_dev->base + (d->hwirq)*4); in amd_gpio_irq_set_wake()
459 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_irq_set_wake()
462 err = enable_irq_wake(gpio_dev->irq); in amd_gpio_irq_set_wake()
464 err = disable_irq_wake(gpio_dev->irq); in amd_gpio_irq_set_wake()
467 dev_err(&gpio_dev->pdev->dev, "failed to %s wake-up interrupt\n", in amd_gpio_irq_set_wake()
478 struct amd_gpio *gpio_dev = gpiochip_get_data(gc); in amd_gpio_irq_eoi() local
480 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_irq_eoi()
481 reg = readl(gpio_dev->base + WAKE_INT_MASTER_REG); in amd_gpio_irq_eoi()
483 writel(reg, gpio_dev->base + WAKE_INT_MASTER_REG); in amd_gpio_irq_eoi()
484 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_irq_eoi()
493 struct amd_gpio *gpio_dev = gpiochip_get_data(gc); in amd_gpio_irq_set_type() local
495 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_irq_set_type()
496 pin_reg = readl(gpio_dev->base + (d->hwirq)*4); in amd_gpio_irq_set_type()
538 dev_err(&gpio_dev->pdev->dev, "Invalid type value\n"); in amd_gpio_irq_set_type()
562 writel(pin_reg_irq_en, gpio_dev->base + (d->hwirq)*4); in amd_gpio_irq_set_type()
563 while ((readl(gpio_dev->base + (d->hwirq)*4) & mask) != mask) in amd_gpio_irq_set_type()
565 writel(pin_reg, gpio_dev->base + (d->hwirq)*4); in amd_gpio_irq_set_type()
566 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_irq_set_type()
604 struct amd_gpio *gpio_dev = dev_id; in do_amd_gpio_irq_handler() local
605 struct gpio_chip *gc = &gpio_dev->gc; in do_amd_gpio_irq_handler()
614 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in do_amd_gpio_irq_handler()
615 status = readl(gpio_dev->base + WAKE_INT_STATUS_REG1); in do_amd_gpio_irq_handler()
617 status |= readl(gpio_dev->base + WAKE_INT_STATUS_REG0); in do_amd_gpio_irq_handler()
618 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in do_amd_gpio_irq_handler()
622 regs = gpio_dev->base; in do_amd_gpio_irq_handler()
633 dev_dbg(&gpio_dev->pdev->dev, in do_amd_gpio_irq_handler()
652 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in do_amd_gpio_irq_handler()
656 dev_dbg(&gpio_dev->pdev->dev, in do_amd_gpio_irq_handler()
661 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in do_amd_gpio_irq_handler()
670 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in do_amd_gpio_irq_handler()
671 regval = readl(gpio_dev->base + WAKE_INT_MASTER_REG); in do_amd_gpio_irq_handler()
673 writel(regval, gpio_dev->base + WAKE_INT_MASTER_REG); in do_amd_gpio_irq_handler()
674 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in do_amd_gpio_irq_handler()
691 struct amd_gpio *gpio_dev = pinctrl_dev_get_drvdata(pctldev); in amd_get_groups_count() local
693 return gpio_dev->ngroups; in amd_get_groups_count()
699 struct amd_gpio *gpio_dev = pinctrl_dev_get_drvdata(pctldev); in amd_get_group_name() local
701 return gpio_dev->groups[group].name; in amd_get_group_name()
709 struct amd_gpio *gpio_dev = pinctrl_dev_get_drvdata(pctldev); in amd_get_group_pins() local
711 *pins = gpio_dev->groups[group].pins; in amd_get_group_pins()
712 *num_pins = gpio_dev->groups[group].npins; in amd_get_group_pins()
733 struct amd_gpio *gpio_dev = pinctrl_dev_get_drvdata(pctldev); in amd_pinconf_get() local
736 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_pinconf_get()
737 pin_reg = readl(gpio_dev->base + pin*4); in amd_pinconf_get()
738 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_pinconf_get()
757 dev_err(&gpio_dev->pdev->dev, "Invalid config param %04x\n", in amd_pinconf_get()
776 struct amd_gpio *gpio_dev = pinctrl_dev_get_drvdata(pctldev); in amd_pinconf_set() local
778 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_pinconf_set()
782 pin_reg = readl(gpio_dev->base + pin*4); in amd_pinconf_set()
810 dev_err(&gpio_dev->pdev->dev, in amd_pinconf_set()
815 writel(pin_reg, gpio_dev->base + pin*4); in amd_pinconf_set()
817 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_pinconf_set()
865 static void amd_gpio_irq_init(struct amd_gpio *gpio_dev) in amd_gpio_irq_init() argument
867 struct pinctrl_desc *desc = gpio_dev->pctrl->desc; in amd_gpio_irq_init()
878 const struct pin_desc *pd = pin_desc_get(gpio_dev->pctrl, pin); in amd_gpio_irq_init()
883 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_irq_init()
885 pin_reg = readl(gpio_dev->base + i * 4); in amd_gpio_irq_init()
887 writel(pin_reg, gpio_dev->base + i * 4); in amd_gpio_irq_init()
889 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_irq_init()
894 static bool amd_gpio_should_save(struct amd_gpio *gpio_dev, unsigned int pin) in amd_gpio_should_save() argument
896 const struct pin_desc *pd = pin_desc_get(gpio_dev->pctrl, pin); in amd_gpio_should_save()
906 gpiochip_line_is_irq(&gpio_dev->gc, pin)) in amd_gpio_should_save()
914 struct amd_gpio *gpio_dev = dev_get_drvdata(dev); in amd_gpio_suspend() local
915 struct pinctrl_desc *desc = gpio_dev->pctrl->desc; in amd_gpio_suspend()
922 if (!amd_gpio_should_save(gpio_dev, pin)) in amd_gpio_suspend()
925 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_suspend()
926 gpio_dev->saved_regs[i] = readl(gpio_dev->base + pin * 4) & ~PIN_IRQ_PENDING; in amd_gpio_suspend()
927 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_suspend()
935 struct amd_gpio *gpio_dev = dev_get_drvdata(dev); in amd_gpio_resume() local
936 struct pinctrl_desc *desc = gpio_dev->pctrl->desc; in amd_gpio_resume()
943 if (!amd_gpio_should_save(gpio_dev, pin)) in amd_gpio_resume()
946 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_resume()
947 gpio_dev->saved_regs[i] |= readl(gpio_dev->base + pin * 4) & PIN_IRQ_PENDING; in amd_gpio_resume()
948 writel(gpio_dev->saved_regs[i], gpio_dev->base + pin * 4); in amd_gpio_resume()
949 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_resume()
975 struct amd_gpio *gpio_dev = pinctrl_dev_get_drvdata(pctrldev); in amd_get_groups() local
977 if (!gpio_dev->iomux_base) { in amd_get_groups()
978 dev_err(&gpio_dev->pdev->dev, "iomux function %d group not supported\n", selector); in amd_get_groups()
989 struct amd_gpio *gpio_dev = pinctrl_dev_get_drvdata(pctrldev); in amd_set_mux() local
990 struct device *dev = &gpio_dev->pdev->dev; in amd_set_mux()
994 if (!gpio_dev->iomux_base) in amd_set_mux()
998 if (strcmp(gpio_dev->groups[group].name, pmx_functions[function].groups[index])) in amd_set_mux()
1001 if (readb(gpio_dev->iomux_base + pmx_functions[function].index) == in amd_set_mux()
1008 writeb(index, gpio_dev->iomux_base + pmx_functions[function].index); in amd_set_mux()
1010 if (index != (readb(gpio_dev->iomux_base + pmx_functions[function].index) & in amd_set_mux()
1017 for (ind = 0; ind < gpio_dev->groups[group].npins; ind++) { in amd_set_mux()
1018 if (strncmp(gpio_dev->groups[group].name, "IMX_F", strlen("IMX_F"))) in amd_set_mux()
1021 pd = pin_desc_get(gpio_dev->pctrl, gpio_dev->groups[group].pins[ind]); in amd_set_mux()
1022 pd->mux_owner = gpio_dev->groups[group].name; in amd_set_mux()
1046 static void amd_get_iomux_res(struct amd_gpio *gpio_dev) in amd_get_iomux_res() argument
1049 struct device *dev = &gpio_dev->pdev->dev; in amd_get_iomux_res()
1058 gpio_dev->iomux_base = devm_platform_ioremap_resource(gpio_dev->pdev, index); in amd_get_iomux_res()
1059 if (IS_ERR(gpio_dev->iomux_base)) { in amd_get_iomux_res()
1074 struct amd_gpio *gpio_dev; in amd_gpio_probe() local
1077 gpio_dev = devm_kzalloc(&pdev->dev, in amd_gpio_probe()
1079 if (!gpio_dev) in amd_gpio_probe()
1082 raw_spin_lock_init(&gpio_dev->lock); in amd_gpio_probe()
1084 gpio_dev->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res); in amd_gpio_probe()
1085 if (IS_ERR(gpio_dev->base)) { in amd_gpio_probe()
1087 return PTR_ERR(gpio_dev->base); in amd_gpio_probe()
1090 gpio_dev->irq = platform_get_irq(pdev, 0); in amd_gpio_probe()
1091 if (gpio_dev->irq < 0) in amd_gpio_probe()
1092 return gpio_dev->irq; in amd_gpio_probe()
1095 gpio_dev->saved_regs = devm_kcalloc(&pdev->dev, amd_pinctrl_desc.npins, in amd_gpio_probe()
1096 sizeof(*gpio_dev->saved_regs), in amd_gpio_probe()
1098 if (!gpio_dev->saved_regs) in amd_gpio_probe()
1102 gpio_dev->pdev = pdev; in amd_gpio_probe()
1103 gpio_dev->gc.get_direction = amd_gpio_get_direction; in amd_gpio_probe()
1104 gpio_dev->gc.direction_input = amd_gpio_direction_input; in amd_gpio_probe()
1105 gpio_dev->gc.direction_output = amd_gpio_direction_output; in amd_gpio_probe()
1106 gpio_dev->gc.get = amd_gpio_get_value; in amd_gpio_probe()
1107 gpio_dev->gc.set = amd_gpio_set_value; in amd_gpio_probe()
1108 gpio_dev->gc.set_config = amd_gpio_set_config; in amd_gpio_probe()
1109 gpio_dev->gc.dbg_show = amd_gpio_dbg_show; in amd_gpio_probe()
1111 gpio_dev->gc.base = -1; in amd_gpio_probe()
1112 gpio_dev->gc.label = pdev->name; in amd_gpio_probe()
1113 gpio_dev->gc.owner = THIS_MODULE; in amd_gpio_probe()
1114 gpio_dev->gc.parent = &pdev->dev; in amd_gpio_probe()
1115 gpio_dev->gc.ngpio = resource_size(res) / 4; in amd_gpio_probe()
1117 gpio_dev->hwbank_num = gpio_dev->gc.ngpio / 64; in amd_gpio_probe()
1118 gpio_dev->groups = kerncz_groups; in amd_gpio_probe()
1119 gpio_dev->ngroups = ARRAY_SIZE(kerncz_groups); in amd_gpio_probe()
1122 amd_get_iomux_res(gpio_dev); in amd_gpio_probe()
1123 gpio_dev->pctrl = devm_pinctrl_register(&pdev->dev, &amd_pinctrl_desc, in amd_gpio_probe()
1124 gpio_dev); in amd_gpio_probe()
1125 if (IS_ERR(gpio_dev->pctrl)) { in amd_gpio_probe()
1127 return PTR_ERR(gpio_dev->pctrl); in amd_gpio_probe()
1131 amd_gpio_irq_init(gpio_dev); in amd_gpio_probe()
1133 girq = &gpio_dev->gc.irq; in amd_gpio_probe()
1142 ret = gpiochip_add_data(&gpio_dev->gc, gpio_dev); in amd_gpio_probe()
1146 ret = gpiochip_add_pin_range(&gpio_dev->gc, dev_name(&pdev->dev), in amd_gpio_probe()
1147 0, 0, gpio_dev->gc.ngpio); in amd_gpio_probe()
1153 ret = devm_request_irq(&pdev->dev, gpio_dev->irq, amd_gpio_irq_handler, in amd_gpio_probe()
1154 IRQF_SHARED, KBUILD_MODNAME, gpio_dev); in amd_gpio_probe()
1158 platform_set_drvdata(pdev, gpio_dev); in amd_gpio_probe()
1159 acpi_register_wakeup_handler(gpio_dev->irq, amd_gpio_check_wake, gpio_dev); in amd_gpio_probe()
1165 gpiochip_remove(&gpio_dev->gc); in amd_gpio_probe()
1172 struct amd_gpio *gpio_dev; in amd_gpio_remove() local
1174 gpio_dev = platform_get_drvdata(pdev); in amd_gpio_remove()
1176 gpiochip_remove(&gpio_dev->gc); in amd_gpio_remove()
1177 acpi_unregister_wakeup_handler(amd_gpio_check_wake, gpio_dev); in amd_gpio_remove()