Lines Matching refs:gpio_dev
46 struct amd_gpio *gpio_dev = gpiochip_get_data(gc);
48 raw_spin_lock_irqsave(&gpio_dev->lock, flags);
49 pin_reg = readl(gpio_dev->base + offset * 4);
50 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
62 struct amd_gpio *gpio_dev = gpiochip_get_data(gc);
64 raw_spin_lock_irqsave(&gpio_dev->lock, flags);
65 pin_reg = readl(gpio_dev->base + offset * 4);
67 writel(pin_reg, gpio_dev->base + offset * 4);
68 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
78 struct amd_gpio *gpio_dev = gpiochip_get_data(gc);
80 raw_spin_lock_irqsave(&gpio_dev->lock, flags);
81 pin_reg = readl(gpio_dev->base + offset * 4);
87 writel(pin_reg, gpio_dev->base + offset * 4);
88 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
97 struct amd_gpio *gpio_dev = gpiochip_get_data(gc);
99 raw_spin_lock_irqsave(&gpio_dev->lock, flags);
100 pin_reg = readl(gpio_dev->base + offset * 4);
101 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
111 struct amd_gpio *gpio_dev = gpiochip_get_data(gc);
113 raw_spin_lock_irqsave(&gpio_dev->lock, flags);
114 pin_reg = readl(gpio_dev->base + offset * 4);
119 writel(pin_reg, gpio_dev->base + offset * 4);
120 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
125 static int amd_gpio_set_debounce(struct amd_gpio *gpio_dev, unsigned int offset,
134 pin_reg = readl(gpio_dev->base + WAKE_INT_MASTER_REG);
139 pin_reg = readl(gpio_dev->base + offset * 4);
188 writel(pin_reg, gpio_dev->base + offset * 4);
200 struct amd_gpio *gpio_dev = gpiochip_get_data(gc);
219 seq_printf(s, "WAKE_INT_MASTER_REG: 0x%08x\n", readl(gpio_dev->base + WAKE_INT_MASTER_REG));
220 for (bank = 0; bank < gpio_dev->hwbank_num; bank++) {
249 raw_spin_lock_irqsave(&gpio_dev->lock, flags);
250 pin_reg = readl(gpio_dev->base + i * 4);
251 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
383 struct amd_gpio *gpio_dev = gpiochip_get_data(gc);
388 raw_spin_lock_irqsave(&gpio_dev->lock, flags);
389 pin_reg = readl(gpio_dev->base + hwirq * 4);
392 writel(pin_reg, gpio_dev->base + hwirq * 4);
393 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
401 struct amd_gpio *gpio_dev = gpiochip_get_data(gc);
404 raw_spin_lock_irqsave(&gpio_dev->lock, flags);
405 pin_reg = readl(gpio_dev->base + hwirq * 4);
408 writel(pin_reg, gpio_dev->base + hwirq * 4);
409 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
419 struct amd_gpio *gpio_dev = gpiochip_get_data(gc);
422 raw_spin_lock_irqsave(&gpio_dev->lock, flags);
423 pin_reg = readl(gpio_dev->base + hwirq * 4);
425 writel(pin_reg, gpio_dev->base + hwirq * 4);
426 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
434 struct amd_gpio *gpio_dev = gpiochip_get_data(gc);
437 raw_spin_lock_irqsave(&gpio_dev->lock, flags);
438 pin_reg = readl(gpio_dev->base + hwirq * 4);
440 writel(pin_reg, gpio_dev->base + hwirq * 4);
441 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
449 struct amd_gpio *gpio_dev = gpiochip_get_data(gc);
457 raw_spin_lock_irqsave(&gpio_dev->lock, flags);
458 pin_reg = readl(gpio_dev->base + hwirq * 4);
465 writel(pin_reg, gpio_dev->base + hwirq * 4);
466 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
469 err = enable_irq_wake(gpio_dev->irq);
471 err = disable_irq_wake(gpio_dev->irq);
474 dev_err(&gpio_dev->pdev->dev, "failed to %s wake-up interrupt\n",
485 struct amd_gpio *gpio_dev = gpiochip_get_data(gc);
487 raw_spin_lock_irqsave(&gpio_dev->lock, flags);
488 reg = readl(gpio_dev->base + WAKE_INT_MASTER_REG);
490 writel(reg, gpio_dev->base + WAKE_INT_MASTER_REG);
491 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
500 struct amd_gpio *gpio_dev = gpiochip_get_data(gc);
503 raw_spin_lock_irqsave(&gpio_dev->lock, flags);
504 pin_reg = readl(gpio_dev->base + hwirq * 4);
546 dev_err(&gpio_dev->pdev->dev, "Invalid type value\n");
570 writel(pin_reg_irq_en, gpio_dev->base + hwirq * 4);
571 while ((readl(gpio_dev->base + hwirq * 4) & mask) != mask)
573 writel(pin_reg, gpio_dev->base + hwirq * 4);
574 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
612 struct amd_gpio *gpio_dev = dev_id;
613 struct gpio_chip *gc = &gpio_dev->gc;
622 raw_spin_lock_irqsave(&gpio_dev->lock, flags);
623 status = readl(gpio_dev->base + WAKE_INT_STATUS_REG1);
625 status |= readl(gpio_dev->base + WAKE_INT_STATUS_REG0);
626 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
630 regs = gpio_dev->base;
660 raw_spin_lock_irqsave(&gpio_dev->lock, flags);
664 dev_dbg(&gpio_dev->pdev->dev,
671 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
679 raw_spin_lock_irqsave(&gpio_dev->lock, flags);
680 regval = readl(gpio_dev->base + WAKE_INT_MASTER_REG);
682 writel(regval, gpio_dev->base + WAKE_INT_MASTER_REG);
683 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
700 struct amd_gpio *gpio_dev = pinctrl_dev_get_drvdata(pctldev);
702 return gpio_dev->ngroups;
708 struct amd_gpio *gpio_dev = pinctrl_dev_get_drvdata(pctldev);
710 return gpio_dev->groups[group].name;
718 struct amd_gpio *gpio_dev = pinctrl_dev_get_drvdata(pctldev);
720 *pins = gpio_dev->groups[group].pins;
721 *num_pins = gpio_dev->groups[group].npins;
742 struct amd_gpio *gpio_dev = pinctrl_dev_get_drvdata(pctldev);
745 raw_spin_lock_irqsave(&gpio_dev->lock, flags);
746 pin_reg = readl(gpio_dev->base + pin*4);
747 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
766 dev_dbg(&gpio_dev->pdev->dev, "Invalid config param %04x\n",
785 struct amd_gpio *gpio_dev = pinctrl_dev_get_drvdata(pctldev);
787 raw_spin_lock_irqsave(&gpio_dev->lock, flags);
791 pin_reg = readl(gpio_dev->base + pin*4);
795 ret = amd_gpio_set_debounce(gpio_dev, pin, arg);
816 dev_dbg(&gpio_dev->pdev->dev,
821 writel(pin_reg, gpio_dev->base + pin*4);
824 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
868 struct amd_gpio *gpio_dev = gpiochip_get_data(gc);
870 return amd_pinconf_set(gpio_dev->pctrl, pin, &config, 1);
880 static void amd_gpio_irq_init(struct amd_gpio *gpio_dev)
882 const struct pinctrl_desc *desc = gpio_dev->pctrl->desc;
892 const struct pin_desc *pd = pin_desc_get(gpio_dev->pctrl, pin);
897 raw_spin_lock_irqsave(&gpio_dev->lock, flags);
899 pin_reg = readl(gpio_dev->base + pin * 4);
901 writel(pin_reg, gpio_dev->base + pin * 4);
903 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
910 struct amd_gpio *gpio_dev = pinctrl_dev;
911 const struct pinctrl_desc *desc = gpio_dev->pctrl->desc;
921 tmp = readl(gpio_dev->base + pin * 4);
946 static bool amd_gpio_should_save(struct amd_gpio *gpio_dev, unsigned int pin)
948 const struct pin_desc *pd = pin_desc_get(gpio_dev->pctrl, pin);
958 gpiochip_line_is_irq(&gpio_dev->gc, pin))
966 struct amd_gpio *gpio_dev = dev_get_drvdata(dev);
967 const struct pinctrl_desc *desc = gpio_dev->pctrl->desc;
975 if (!amd_gpio_should_save(gpio_dev, pin))
978 raw_spin_lock_irqsave(&gpio_dev->lock, flags);
979 gpio_dev->saved_regs[i] = readl(gpio_dev->base + pin * 4) & ~PIN_IRQ_PENDING;
982 if (!(gpio_dev->saved_regs[i] & wake_mask)) {
983 writel(gpio_dev->saved_regs[i] & ~BIT(INTERRUPT_MASK_OFF),
984 gpio_dev->base + pin * 4);
994 if (gpio_dev->saved_regs[i] & (DB_CNTRl_MASK << DB_CNTRL_OFF)) {
995 amd_gpio_set_debounce(gpio_dev, pin, 0);
1000 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
1021 struct amd_gpio *gpio_dev = dev_get_drvdata(dev);
1022 const struct pinctrl_desc *desc = gpio_dev->pctrl->desc;
1029 if (!amd_gpio_should_save(gpio_dev, pin))
1032 raw_spin_lock_irqsave(&gpio_dev->lock, flags);
1033 gpio_dev->saved_regs[i] |= readl(gpio_dev->base + pin * 4) & PIN_IRQ_PENDING;
1034 writel(gpio_dev->saved_regs[i], gpio_dev->base + pin * 4);
1035 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
1065 struct amd_gpio *gpio_dev = pinctrl_dev_get_drvdata(pctrldev);
1067 if (!gpio_dev->iomux_base) {
1068 dev_err(&gpio_dev->pdev->dev, "iomux function %d group not supported\n", selector);
1079 struct amd_gpio *gpio_dev = pinctrl_dev_get_drvdata(pctrldev);
1080 struct device *dev = &gpio_dev->pdev->dev;
1084 if (!gpio_dev->iomux_base)
1088 if (strcmp(gpio_dev->groups[group].name, pmx_functions[function].groups[index]))
1091 if (readb(gpio_dev->iomux_base + pmx_functions[function].index) ==
1098 writeb(index, gpio_dev->iomux_base + pmx_functions[function].index);
1100 if (index != (readb(gpio_dev->iomux_base + pmx_functions[function].index) &
1107 for (ind = 0; ind < gpio_dev->groups[group].npins; ind++) {
1108 if (strncmp(gpio_dev->groups[group].name, "IMX_F", strlen("IMX_F")))
1111 pd = pin_desc_get(gpio_dev->pctrl, gpio_dev->groups[group].pins[ind]);
1112 pd->mux_owner = gpio_dev->groups[group].name;
1136 static void amd_get_iomux_res(struct amd_gpio *gpio_dev)
1139 struct device *dev = &gpio_dev->pdev->dev;
1148 gpio_dev->iomux_base = devm_platform_ioremap_resource(gpio_dev->pdev, index);
1149 if (IS_ERR(gpio_dev->iomux_base)) {
1164 struct amd_gpio *gpio_dev;
1167 gpio_dev = devm_kzalloc(&pdev->dev,
1169 if (!gpio_dev)
1172 raw_spin_lock_init(&gpio_dev->lock);
1174 gpio_dev->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
1175 if (IS_ERR(gpio_dev->base)) {
1177 return PTR_ERR(gpio_dev->base);
1180 gpio_dev->irq = platform_get_irq(pdev, 0);
1181 if (gpio_dev->irq < 0)
1182 return gpio_dev->irq;
1185 gpio_dev->saved_regs = devm_kcalloc(&pdev->dev, amd_pinctrl_desc.npins,
1186 sizeof(*gpio_dev->saved_regs),
1188 if (!gpio_dev->saved_regs)
1192 gpio_dev->pdev = pdev;
1193 gpio_dev->gc.get_direction = amd_gpio_get_direction;
1194 gpio_dev->gc.direction_input = amd_gpio_direction_input;
1195 gpio_dev->gc.direction_output = amd_gpio_direction_output;
1196 gpio_dev->gc.get = amd_gpio_get_value;
1197 gpio_dev->gc.set = amd_gpio_set_value;
1198 gpio_dev->gc.set_config = amd_gpio_set_config;
1199 gpio_dev->gc.dbg_show = amd_gpio_dbg_show;
1201 gpio_dev->gc.base = -1;
1202 gpio_dev->gc.label = pdev->name;
1203 gpio_dev->gc.owner = THIS_MODULE;
1204 gpio_dev->gc.parent = &pdev->dev;
1205 gpio_dev->gc.ngpio = resource_size(res) / 4;
1207 gpio_dev->hwbank_num = gpio_dev->gc.ngpio / 64;
1208 gpio_dev->groups = kerncz_groups;
1209 gpio_dev->ngroups = ARRAY_SIZE(kerncz_groups);
1212 amd_get_iomux_res(gpio_dev);
1213 gpio_dev->pctrl = devm_pinctrl_register(&pdev->dev, &amd_pinctrl_desc,
1214 gpio_dev);
1215 if (IS_ERR(gpio_dev->pctrl)) {
1217 return PTR_ERR(gpio_dev->pctrl);
1221 amd_gpio_irq_init(gpio_dev);
1223 girq = &gpio_dev->gc.irq;
1232 ret = gpiochip_add_data(&gpio_dev->gc, gpio_dev);
1236 ret = gpiochip_add_pin_range(&gpio_dev->gc, dev_name(&pdev->dev),
1237 0, 0, gpio_dev->gc.ngpio);
1243 ret = devm_request_irq(&pdev->dev, gpio_dev->irq, amd_gpio_irq_handler,
1244 IRQF_SHARED | IRQF_COND_ONESHOT, KBUILD_MODNAME, gpio_dev);
1248 platform_set_drvdata(pdev, gpio_dev);
1249 acpi_register_wakeup_handler(gpio_dev->irq, amd_gpio_check_wake, gpio_dev);
1256 gpiochip_remove(&gpio_dev->gc);
1263 struct amd_gpio *gpio_dev;
1265 gpio_dev = platform_get_drvdata(pdev);
1267 gpiochip_remove(&gpio_dev->gc);
1268 acpi_unregister_wakeup_handler(amd_gpio_check_wake, gpio_dev);