Lines Matching refs:gpio_dev
48 struct amd_gpio *gpio_dev = gpiochip_get_data(gc); in amd_gpio_get_direction() local
50 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_get_direction()
51 pin_reg = readl(gpio_dev->base + offset * 4); in amd_gpio_get_direction()
52 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_get_direction()
64 struct amd_gpio *gpio_dev = gpiochip_get_data(gc); in amd_gpio_direction_input() local
66 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_direction_input()
67 pin_reg = readl(gpio_dev->base + offset * 4); in amd_gpio_direction_input()
69 writel(pin_reg, gpio_dev->base + offset * 4); in amd_gpio_direction_input()
70 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_direction_input()
80 struct amd_gpio *gpio_dev = gpiochip_get_data(gc); in amd_gpio_direction_output() local
82 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_direction_output()
83 pin_reg = readl(gpio_dev->base + offset * 4); in amd_gpio_direction_output()
89 writel(pin_reg, gpio_dev->base + offset * 4); in amd_gpio_direction_output()
90 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_direction_output()
99 struct amd_gpio *gpio_dev = gpiochip_get_data(gc); in amd_gpio_get_value() local
101 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_get_value()
102 pin_reg = readl(gpio_dev->base + offset * 4); in amd_gpio_get_value()
103 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_get_value()
113 struct amd_gpio *gpio_dev = gpiochip_get_data(gc); in amd_gpio_set_value() local
115 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_set_value()
116 pin_reg = readl(gpio_dev->base + offset * 4); in amd_gpio_set_value()
121 writel(pin_reg, gpio_dev->base + offset * 4); in amd_gpio_set_value()
122 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_set_value()
127 static int amd_gpio_set_debounce(struct amd_gpio *gpio_dev, unsigned int offset, in amd_gpio_set_debounce() argument
136 pin_reg = readl(gpio_dev->base + WAKE_INT_MASTER_REG); in amd_gpio_set_debounce()
141 pin_reg = readl(gpio_dev->base + offset * 4); in amd_gpio_set_debounce()
190 writel(pin_reg, gpio_dev->base + offset * 4); in amd_gpio_set_debounce()
202 struct amd_gpio *gpio_dev = gpiochip_get_data(gc); in amd_gpio_dbg_show() local
221 seq_printf(s, "WAKE_INT_MASTER_REG: 0x%08x\n", readl(gpio_dev->base + WAKE_INT_MASTER_REG)); in amd_gpio_dbg_show()
222 for (bank = 0; bank < gpio_dev->hwbank_num; bank++) { in amd_gpio_dbg_show()
251 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_dbg_show()
252 pin_reg = readl(gpio_dev->base + i * 4); in amd_gpio_dbg_show()
253 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_dbg_show()
385 struct amd_gpio *gpio_dev = gpiochip_get_data(gc); in amd_gpio_irq_enable() local
389 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_irq_enable()
390 pin_reg = readl(gpio_dev->base + (d->hwirq)*4); in amd_gpio_irq_enable()
393 writel(pin_reg, gpio_dev->base + (d->hwirq)*4); in amd_gpio_irq_enable()
394 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_irq_enable()
402 struct amd_gpio *gpio_dev = gpiochip_get_data(gc); in amd_gpio_irq_disable() local
404 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_irq_disable()
405 pin_reg = readl(gpio_dev->base + (d->hwirq)*4); in amd_gpio_irq_disable()
408 writel(pin_reg, gpio_dev->base + (d->hwirq)*4); in amd_gpio_irq_disable()
409 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_irq_disable()
419 struct amd_gpio *gpio_dev = gpiochip_get_data(gc); in amd_gpio_irq_mask() local
421 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_irq_mask()
422 pin_reg = readl(gpio_dev->base + (d->hwirq)*4); in amd_gpio_irq_mask()
424 writel(pin_reg, gpio_dev->base + (d->hwirq)*4); in amd_gpio_irq_mask()
425 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_irq_mask()
433 struct amd_gpio *gpio_dev = gpiochip_get_data(gc); in amd_gpio_irq_unmask() local
435 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_irq_unmask()
436 pin_reg = readl(gpio_dev->base + (d->hwirq)*4); in amd_gpio_irq_unmask()
438 writel(pin_reg, gpio_dev->base + (d->hwirq)*4); in amd_gpio_irq_unmask()
439 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_irq_unmask()
447 struct amd_gpio *gpio_dev = gpiochip_get_data(gc); in amd_gpio_irq_set_wake() local
451 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_irq_set_wake()
452 pin_reg = readl(gpio_dev->base + (d->hwirq)*4); in amd_gpio_irq_set_wake()
459 writel(pin_reg, gpio_dev->base + (d->hwirq)*4); in amd_gpio_irq_set_wake()
460 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_irq_set_wake()
463 err = enable_irq_wake(gpio_dev->irq); in amd_gpio_irq_set_wake()
465 err = disable_irq_wake(gpio_dev->irq); in amd_gpio_irq_set_wake()
468 dev_err(&gpio_dev->pdev->dev, "failed to %s wake-up interrupt\n", in amd_gpio_irq_set_wake()
479 struct amd_gpio *gpio_dev = gpiochip_get_data(gc); in amd_gpio_irq_eoi() local
481 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_irq_eoi()
482 reg = readl(gpio_dev->base + WAKE_INT_MASTER_REG); in amd_gpio_irq_eoi()
484 writel(reg, gpio_dev->base + WAKE_INT_MASTER_REG); in amd_gpio_irq_eoi()
485 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_irq_eoi()
494 struct amd_gpio *gpio_dev = gpiochip_get_data(gc); in amd_gpio_irq_set_type() local
496 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_irq_set_type()
497 pin_reg = readl(gpio_dev->base + (d->hwirq)*4); in amd_gpio_irq_set_type()
539 dev_err(&gpio_dev->pdev->dev, "Invalid type value\n"); in amd_gpio_irq_set_type()
563 writel(pin_reg_irq_en, gpio_dev->base + (d->hwirq)*4); in amd_gpio_irq_set_type()
564 while ((readl(gpio_dev->base + (d->hwirq)*4) & mask) != mask) in amd_gpio_irq_set_type()
566 writel(pin_reg, gpio_dev->base + (d->hwirq)*4); in amd_gpio_irq_set_type()
567 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_irq_set_type()
605 struct amd_gpio *gpio_dev = dev_id; in do_amd_gpio_irq_handler() local
606 struct gpio_chip *gc = &gpio_dev->gc; in do_amd_gpio_irq_handler()
615 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in do_amd_gpio_irq_handler()
616 status = readl(gpio_dev->base + WAKE_INT_STATUS_REG1); in do_amd_gpio_irq_handler()
618 status |= readl(gpio_dev->base + WAKE_INT_STATUS_REG0); in do_amd_gpio_irq_handler()
619 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in do_amd_gpio_irq_handler()
623 regs = gpio_dev->base; in do_amd_gpio_irq_handler()
653 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in do_amd_gpio_irq_handler()
657 dev_dbg(&gpio_dev->pdev->dev, in do_amd_gpio_irq_handler()
664 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in do_amd_gpio_irq_handler()
672 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in do_amd_gpio_irq_handler()
673 regval = readl(gpio_dev->base + WAKE_INT_MASTER_REG); in do_amd_gpio_irq_handler()
675 writel(regval, gpio_dev->base + WAKE_INT_MASTER_REG); in do_amd_gpio_irq_handler()
676 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in do_amd_gpio_irq_handler()
693 struct amd_gpio *gpio_dev = pinctrl_dev_get_drvdata(pctldev); in amd_get_groups_count() local
695 return gpio_dev->ngroups; in amd_get_groups_count()
701 struct amd_gpio *gpio_dev = pinctrl_dev_get_drvdata(pctldev); in amd_get_group_name() local
703 return gpio_dev->groups[group].name; in amd_get_group_name()
711 struct amd_gpio *gpio_dev = pinctrl_dev_get_drvdata(pctldev); in amd_get_group_pins() local
713 *pins = gpio_dev->groups[group].pins; in amd_get_group_pins()
714 *num_pins = gpio_dev->groups[group].npins; in amd_get_group_pins()
735 struct amd_gpio *gpio_dev = pinctrl_dev_get_drvdata(pctldev); in amd_pinconf_get() local
738 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_pinconf_get()
739 pin_reg = readl(gpio_dev->base + pin*4); in amd_pinconf_get()
740 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_pinconf_get()
759 dev_dbg(&gpio_dev->pdev->dev, "Invalid config param %04x\n", in amd_pinconf_get()
778 struct amd_gpio *gpio_dev = pinctrl_dev_get_drvdata(pctldev); in amd_pinconf_set() local
780 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_pinconf_set()
784 pin_reg = readl(gpio_dev->base + pin*4); in amd_pinconf_set()
788 ret = amd_gpio_set_debounce(gpio_dev, pin, arg); in amd_pinconf_set()
809 dev_dbg(&gpio_dev->pdev->dev, in amd_pinconf_set()
814 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()
861 struct amd_gpio *gpio_dev = gpiochip_get_data(gc); in amd_gpio_set_config() local
863 return amd_pinconf_set(gpio_dev->pctrl, pin, &config, 1); in amd_gpio_set_config()
873 static void amd_gpio_irq_init(struct amd_gpio *gpio_dev) in amd_gpio_irq_init() argument
875 const struct pinctrl_desc *desc = gpio_dev->pctrl->desc; in amd_gpio_irq_init()
885 const struct pin_desc *pd = pin_desc_get(gpio_dev->pctrl, pin); in amd_gpio_irq_init()
890 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_irq_init()
892 pin_reg = readl(gpio_dev->base + pin * 4); in amd_gpio_irq_init()
894 writel(pin_reg, gpio_dev->base + pin * 4); in amd_gpio_irq_init()
896 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_irq_init()
903 struct amd_gpio *gpio_dev = pinctrl_dev; in amd_gpio_check_pending() local
904 const struct pinctrl_desc *desc = gpio_dev->pctrl->desc; in amd_gpio_check_pending()
914 tmp = readl(gpio_dev->base + pin * 4); in amd_gpio_check_pending()
939 static bool amd_gpio_should_save(struct amd_gpio *gpio_dev, unsigned int pin) in amd_gpio_should_save() argument
941 const struct pin_desc *pd = pin_desc_get(gpio_dev->pctrl, pin); in amd_gpio_should_save()
951 gpiochip_line_is_irq(&gpio_dev->gc, pin)) in amd_gpio_should_save()
959 struct amd_gpio *gpio_dev = dev_get_drvdata(dev); in amd_gpio_suspend_hibernate_common() local
960 const struct pinctrl_desc *desc = gpio_dev->pctrl->desc; in amd_gpio_suspend_hibernate_common()
968 if (!amd_gpio_should_save(gpio_dev, pin)) in amd_gpio_suspend_hibernate_common()
971 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_suspend_hibernate_common()
972 gpio_dev->saved_regs[i] = readl(gpio_dev->base + pin * 4) & ~PIN_IRQ_PENDING; in amd_gpio_suspend_hibernate_common()
975 if (!(gpio_dev->saved_regs[i] & wake_mask)) { in amd_gpio_suspend_hibernate_common()
976 writel(gpio_dev->saved_regs[i] & ~BIT(INTERRUPT_MASK_OFF), in amd_gpio_suspend_hibernate_common()
977 gpio_dev->base + pin * 4); in amd_gpio_suspend_hibernate_common()
987 if (gpio_dev->saved_regs[i] & (DB_CNTRl_MASK << DB_CNTRL_OFF)) { in amd_gpio_suspend_hibernate_common()
988 amd_gpio_set_debounce(gpio_dev, pin, 0); in amd_gpio_suspend_hibernate_common()
993 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_suspend_hibernate_common()
1014 struct amd_gpio *gpio_dev = dev_get_drvdata(dev); in amd_gpio_resume() local
1015 const struct pinctrl_desc *desc = gpio_dev->pctrl->desc; in amd_gpio_resume()
1022 if (!amd_gpio_should_save(gpio_dev, pin)) in amd_gpio_resume()
1025 raw_spin_lock_irqsave(&gpio_dev->lock, flags); in amd_gpio_resume()
1026 gpio_dev->saved_regs[i] |= readl(gpio_dev->base + pin * 4) & PIN_IRQ_PENDING; in amd_gpio_resume()
1027 writel(gpio_dev->saved_regs[i], gpio_dev->base + pin * 4); in amd_gpio_resume()
1028 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); in amd_gpio_resume()
1058 struct amd_gpio *gpio_dev = pinctrl_dev_get_drvdata(pctrldev); in amd_get_groups() local
1060 if (!gpio_dev->iomux_base) { in amd_get_groups()
1061 dev_err(&gpio_dev->pdev->dev, "iomux function %d group not supported\n", selector); in amd_get_groups()
1072 struct amd_gpio *gpio_dev = pinctrl_dev_get_drvdata(pctrldev); in amd_set_mux() local
1073 struct device *dev = &gpio_dev->pdev->dev; in amd_set_mux()
1077 if (!gpio_dev->iomux_base) in amd_set_mux()
1081 if (strcmp(gpio_dev->groups[group].name, pmx_functions[function].groups[index])) in amd_set_mux()
1084 if (readb(gpio_dev->iomux_base + pmx_functions[function].index) == in amd_set_mux()
1091 writeb(index, gpio_dev->iomux_base + pmx_functions[function].index); in amd_set_mux()
1093 if (index != (readb(gpio_dev->iomux_base + pmx_functions[function].index) & in amd_set_mux()
1100 for (ind = 0; ind < gpio_dev->groups[group].npins; ind++) { in amd_set_mux()
1101 if (strncmp(gpio_dev->groups[group].name, "IMX_F", strlen("IMX_F"))) in amd_set_mux()
1104 pd = pin_desc_get(gpio_dev->pctrl, gpio_dev->groups[group].pins[ind]); in amd_set_mux()
1105 pd->mux_owner = gpio_dev->groups[group].name; in amd_set_mux()
1129 static void amd_get_iomux_res(struct amd_gpio *gpio_dev) in amd_get_iomux_res() argument
1132 struct device *dev = &gpio_dev->pdev->dev; in amd_get_iomux_res()
1141 gpio_dev->iomux_base = devm_platform_ioremap_resource(gpio_dev->pdev, index); in amd_get_iomux_res()
1142 if (IS_ERR(gpio_dev->iomux_base)) { in amd_get_iomux_res()
1157 struct amd_gpio *gpio_dev; in amd_gpio_probe() local
1160 gpio_dev = devm_kzalloc(&pdev->dev, in amd_gpio_probe()
1162 if (!gpio_dev) in amd_gpio_probe()
1165 raw_spin_lock_init(&gpio_dev->lock); in amd_gpio_probe()
1167 gpio_dev->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res); in amd_gpio_probe()
1168 if (IS_ERR(gpio_dev->base)) { in amd_gpio_probe()
1170 return PTR_ERR(gpio_dev->base); in amd_gpio_probe()
1173 gpio_dev->irq = platform_get_irq(pdev, 0); in amd_gpio_probe()
1174 if (gpio_dev->irq < 0) in amd_gpio_probe()
1175 return gpio_dev->irq; in amd_gpio_probe()
1178 gpio_dev->saved_regs = devm_kcalloc(&pdev->dev, amd_pinctrl_desc.npins, in amd_gpio_probe()
1179 sizeof(*gpio_dev->saved_regs), in amd_gpio_probe()
1181 if (!gpio_dev->saved_regs) in amd_gpio_probe()
1185 gpio_dev->pdev = pdev; in amd_gpio_probe()
1186 gpio_dev->gc.get_direction = amd_gpio_get_direction; in amd_gpio_probe()
1187 gpio_dev->gc.direction_input = amd_gpio_direction_input; in amd_gpio_probe()
1188 gpio_dev->gc.direction_output = amd_gpio_direction_output; in amd_gpio_probe()
1189 gpio_dev->gc.get = amd_gpio_get_value; in amd_gpio_probe()
1190 gpio_dev->gc.set = amd_gpio_set_value; in amd_gpio_probe()
1191 gpio_dev->gc.set_config = amd_gpio_set_config; in amd_gpio_probe()
1192 gpio_dev->gc.dbg_show = amd_gpio_dbg_show; in amd_gpio_probe()
1194 gpio_dev->gc.base = -1; in amd_gpio_probe()
1195 gpio_dev->gc.label = pdev->name; in amd_gpio_probe()
1196 gpio_dev->gc.owner = THIS_MODULE; in amd_gpio_probe()
1197 gpio_dev->gc.parent = &pdev->dev; in amd_gpio_probe()
1198 gpio_dev->gc.ngpio = resource_size(res) / 4; in amd_gpio_probe()
1200 gpio_dev->hwbank_num = gpio_dev->gc.ngpio / 64; in amd_gpio_probe()
1201 gpio_dev->groups = kerncz_groups; in amd_gpio_probe()
1202 gpio_dev->ngroups = ARRAY_SIZE(kerncz_groups); in amd_gpio_probe()
1205 amd_get_iomux_res(gpio_dev); in amd_gpio_probe()
1206 gpio_dev->pctrl = devm_pinctrl_register(&pdev->dev, &amd_pinctrl_desc, in amd_gpio_probe()
1207 gpio_dev); in amd_gpio_probe()
1208 if (IS_ERR(gpio_dev->pctrl)) { in amd_gpio_probe()
1210 return PTR_ERR(gpio_dev->pctrl); in amd_gpio_probe()
1214 amd_gpio_irq_init(gpio_dev); in amd_gpio_probe()
1216 girq = &gpio_dev->gc.irq; in amd_gpio_probe()
1225 ret = gpiochip_add_data(&gpio_dev->gc, gpio_dev); in amd_gpio_probe()
1229 ret = gpiochip_add_pin_range(&gpio_dev->gc, dev_name(&pdev->dev), in amd_gpio_probe()
1230 0, 0, gpio_dev->gc.ngpio); in amd_gpio_probe()
1236 ret = devm_request_irq(&pdev->dev, gpio_dev->irq, amd_gpio_irq_handler, in amd_gpio_probe()
1237 IRQF_SHARED | IRQF_COND_ONESHOT, KBUILD_MODNAME, gpio_dev); in amd_gpio_probe()
1241 platform_set_drvdata(pdev, gpio_dev); in amd_gpio_probe()
1242 acpi_register_wakeup_handler(gpio_dev->irq, amd_gpio_check_wake, gpio_dev); in amd_gpio_probe()
1249 gpiochip_remove(&gpio_dev->gc); in amd_gpio_probe()
1256 struct amd_gpio *gpio_dev; in amd_gpio_remove() local
1258 gpio_dev = platform_get_drvdata(pdev); in amd_gpio_remove()
1260 gpiochip_remove(&gpio_dev->gc); in amd_gpio_remove()
1261 acpi_unregister_wakeup_handler(amd_gpio_check_wake, gpio_dev); in amd_gpio_remove()