Lines Matching refs:vg

710 static struct byt_community *byt_get_community(struct byt_gpio *vg,  in byt_get_community()  argument
716 for (i = 0; i < vg->soc_data->ncommunities; i++) { in byt_get_community()
717 comm = vg->communities_copy + i; in byt_get_community()
725 static void __iomem *byt_gpio_reg(struct byt_gpio *vg, unsigned int offset, in byt_gpio_reg() argument
728 struct byt_community *comm = byt_get_community(vg, offset); in byt_gpio_reg()
752 struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctldev); in byt_get_groups_count() local
754 return vg->soc_data->ngroups; in byt_get_groups_count()
760 struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctldev); in byt_get_group_name() local
762 return vg->soc_data->groups[selector].name; in byt_get_group_name()
770 struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctldev); in byt_get_group_pins() local
772 *pins = vg->soc_data->groups[selector].pins; in byt_get_group_pins()
773 *num_pins = vg->soc_data->groups[selector].npins; in byt_get_group_pins()
786 struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctldev); in byt_get_functions_count() local
788 return vg->soc_data->nfunctions; in byt_get_functions_count()
794 struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctldev); in byt_get_function_name() local
796 return vg->soc_data->functions[selector].name; in byt_get_function_name()
804 struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctldev); in byt_get_function_groups() local
806 *groups = vg->soc_data->functions[selector].groups; in byt_get_function_groups()
807 *num_groups = vg->soc_data->functions[selector].ngroups; in byt_get_function_groups()
844 static void byt_set_group_simple_mux(struct byt_gpio *vg, in byt_set_group_simple_mux() argument
851 raw_spin_lock_irqsave(&vg->lock, flags); in byt_set_group_simple_mux()
857 padcfg0 = byt_gpio_reg(vg, group.pins[i], BYT_CONF0_REG); in byt_set_group_simple_mux()
859 dev_warn(&vg->pdev->dev, in byt_set_group_simple_mux()
871 raw_spin_unlock_irqrestore(&vg->lock, flags); in byt_set_group_simple_mux()
874 static void byt_set_group_mixed_mux(struct byt_gpio *vg, in byt_set_group_mixed_mux() argument
881 raw_spin_lock_irqsave(&vg->lock, flags); in byt_set_group_mixed_mux()
887 padcfg0 = byt_gpio_reg(vg, group.pins[i], BYT_CONF0_REG); in byt_set_group_mixed_mux()
889 dev_warn(&vg->pdev->dev, in byt_set_group_mixed_mux()
901 raw_spin_unlock_irqrestore(&vg->lock, flags); in byt_set_group_mixed_mux()
907 struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctldev); in byt_set_mux() local
908 const struct byt_function func = vg->soc_data->functions[func_selector]; in byt_set_mux()
909 const struct byt_pingroup group = vg->soc_data->groups[group_selector]; in byt_set_mux()
920 byt_set_group_simple_mux(vg, group, BYT_DEFAULT_GPIO_MUX); in byt_set_mux()
922 byt_set_group_simple_mux(vg, group, simple_func); in byt_set_mux()
924 byt_set_group_mixed_mux(vg, group, mixed_func); in byt_set_mux()
929 static u32 byt_get_gpio_mux(struct byt_gpio *vg, unsigned offset) in byt_get_gpio_mux() argument
932 if (!strcmp(vg->soc_data->uid, BYT_SCORE_ACPI_UID) && in byt_get_gpio_mux()
937 if (!strcmp(vg->soc_data->uid, BYT_SUS_ACPI_UID) && in byt_get_gpio_mux()
944 static void byt_gpio_clear_triggering(struct byt_gpio *vg, unsigned int offset) in byt_gpio_clear_triggering() argument
946 void __iomem *reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG); in byt_gpio_clear_triggering()
950 raw_spin_lock_irqsave(&vg->lock, flags); in byt_gpio_clear_triggering()
954 raw_spin_unlock_irqrestore(&vg->lock, flags); in byt_gpio_clear_triggering()
961 struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctl_dev); in byt_gpio_request_enable() local
962 void __iomem *reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG); in byt_gpio_request_enable()
966 raw_spin_lock_irqsave(&vg->lock, flags); in byt_gpio_request_enable()
978 gpio_mux = byt_get_gpio_mux(vg, offset); in byt_gpio_request_enable()
984 dev_warn(&vg->pdev->dev, FW_BUG in byt_gpio_request_enable()
988 raw_spin_unlock_irqrestore(&vg->lock, flags); in byt_gpio_request_enable()
990 pm_runtime_get(&vg->pdev->dev); in byt_gpio_request_enable()
999 struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctl_dev); in byt_gpio_disable_free() local
1001 byt_gpio_clear_triggering(vg, offset); in byt_gpio_disable_free()
1002 pm_runtime_put(&vg->pdev->dev); in byt_gpio_disable_free()
1010 struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctl_dev); in byt_gpio_set_direction() local
1011 void __iomem *val_reg = byt_gpio_reg(vg, offset, BYT_VAL_REG); in byt_gpio_set_direction()
1012 void __iomem *conf_reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG); in byt_gpio_set_direction()
1016 raw_spin_lock_irqsave(&vg->lock, flags); in byt_gpio_set_direction()
1033 raw_spin_unlock_irqrestore(&vg->lock, flags); in byt_gpio_set_direction()
1093 struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctl_dev); in byt_pin_config_get() local
1095 void __iomem *conf_reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG); in byt_pin_config_get()
1096 void __iomem *val_reg = byt_gpio_reg(vg, offset, BYT_VAL_REG); in byt_pin_config_get()
1097 void __iomem *db_reg = byt_gpio_reg(vg, offset, BYT_DEBOUNCE_REG); in byt_pin_config_get()
1102 raw_spin_lock_irqsave(&vg->lock, flags); in byt_pin_config_get()
1106 raw_spin_unlock_irqrestore(&vg->lock, flags); in byt_pin_config_get()
1133 raw_spin_lock_irqsave(&vg->lock, flags); in byt_pin_config_get()
1135 raw_spin_unlock_irqrestore(&vg->lock, flags); in byt_pin_config_get()
1178 struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctl_dev); in byt_pin_config_set() local
1180 void __iomem *conf_reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG); in byt_pin_config_set()
1181 void __iomem *val_reg = byt_gpio_reg(vg, offset, BYT_VAL_REG); in byt_pin_config_set()
1182 void __iomem *db_reg = byt_gpio_reg(vg, offset, BYT_DEBOUNCE_REG); in byt_pin_config_set()
1187 raw_spin_lock_irqsave(&vg->lock, flags); in byt_pin_config_set()
1212 dev_warn(&vg->pdev->dev, in byt_pin_config_set()
1234 dev_warn(&vg->pdev->dev, in byt_pin_config_set()
1295 raw_spin_unlock_irqrestore(&vg->lock, flags); in byt_pin_config_set()
1315 struct byt_gpio *vg = gpiochip_get_data(chip); in byt_gpio_get() local
1316 void __iomem *reg = byt_gpio_reg(vg, offset, BYT_VAL_REG); in byt_gpio_get()
1320 raw_spin_lock_irqsave(&vg->lock, flags); in byt_gpio_get()
1322 raw_spin_unlock_irqrestore(&vg->lock, flags); in byt_gpio_get()
1329 struct byt_gpio *vg = gpiochip_get_data(chip); in byt_gpio_set() local
1330 void __iomem *reg = byt_gpio_reg(vg, offset, BYT_VAL_REG); in byt_gpio_set()
1337 raw_spin_lock_irqsave(&vg->lock, flags); in byt_gpio_set()
1343 raw_spin_unlock_irqrestore(&vg->lock, flags); in byt_gpio_set()
1348 struct byt_gpio *vg = gpiochip_get_data(chip); in byt_gpio_get_direction() local
1349 void __iomem *reg = byt_gpio_reg(vg, offset, BYT_VAL_REG); in byt_gpio_get_direction()
1356 raw_spin_lock_irqsave(&vg->lock, flags); in byt_gpio_get_direction()
1358 raw_spin_unlock_irqrestore(&vg->lock, flags); in byt_gpio_get_direction()
1388 struct byt_gpio *vg = gpiochip_get_data(chip); in byt_gpio_dbg_show() local
1392 for (i = 0; i < vg->soc_data->npins; i++) { in byt_gpio_dbg_show()
1401 raw_spin_lock_irqsave(&vg->lock, flags); in byt_gpio_dbg_show()
1402 pin = vg->soc_data->pins[i].number; in byt_gpio_dbg_show()
1403 reg = byt_gpio_reg(vg, pin, BYT_CONF0_REG); in byt_gpio_dbg_show()
1408 raw_spin_unlock_irqrestore(&vg->lock, flags); in byt_gpio_dbg_show()
1413 reg = byt_gpio_reg(vg, pin, BYT_VAL_REG); in byt_gpio_dbg_show()
1417 raw_spin_unlock_irqrestore(&vg->lock, flags); in byt_gpio_dbg_show()
1421 raw_spin_unlock_irqrestore(&vg->lock, flags); in byt_gpio_dbg_show()
1423 comm = byt_get_community(vg, pin); in byt_gpio_dbg_show()
1497 struct byt_gpio *vg = gpiochip_get_data(gc); in byt_irq_ack() local
1501 reg = byt_gpio_reg(vg, offset, BYT_INT_STAT_REG); in byt_irq_ack()
1505 raw_spin_lock(&vg->lock); in byt_irq_ack()
1507 raw_spin_unlock(&vg->lock); in byt_irq_ack()
1513 struct byt_gpio *vg = gpiochip_get_data(gc); in byt_irq_mask() local
1515 byt_gpio_clear_triggering(vg, irqd_to_hwirq(d)); in byt_irq_mask()
1521 struct byt_gpio *vg = gpiochip_get_data(gc); in byt_irq_unmask() local
1527 reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG); in byt_irq_unmask()
1531 raw_spin_lock_irqsave(&vg->lock, flags); in byt_irq_unmask()
1554 raw_spin_unlock_irqrestore(&vg->lock, flags); in byt_irq_unmask()
1559 struct byt_gpio *vg = gpiochip_get_data(irq_data_get_irq_chip_data(d)); in byt_irq_type() local
1563 void __iomem *reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG); in byt_irq_type()
1565 if (!reg || offset >= vg->chip.ngpio) in byt_irq_type()
1568 raw_spin_lock_irqsave(&vg->lock, flags); in byt_irq_type()
1590 raw_spin_unlock_irqrestore(&vg->lock, flags); in byt_irq_type()
1607 struct byt_gpio *vg = gpiochip_get_data( in byt_gpio_irq_handler() local
1616 for (base = 0; base < vg->chip.ngpio; base += 32) { in byt_gpio_irq_handler()
1617 reg = byt_gpio_reg(vg, base, BYT_INT_STAT_REG); in byt_gpio_irq_handler()
1620 dev_warn(&vg->pdev->dev, in byt_gpio_irq_handler()
1626 raw_spin_lock(&vg->lock); in byt_gpio_irq_handler()
1628 raw_spin_unlock(&vg->lock); in byt_gpio_irq_handler()
1630 virq = irq_find_mapping(vg->chip.irq.domain, base + pin); in byt_gpio_irq_handler()
1637 static void byt_gpio_irq_init_hw(struct byt_gpio *vg) in byt_gpio_irq_init_hw() argument
1639 struct gpio_chip *gc = &vg->chip; in byt_gpio_irq_init_hw()
1640 struct device *dev = &vg->pdev->dev; in byt_gpio_irq_init_hw()
1650 for (i = 0; i < vg->soc_data->npins; i++) { in byt_gpio_irq_init_hw()
1651 unsigned int pin = vg->soc_data->pins[i].number; in byt_gpio_irq_init_hw()
1653 reg = byt_gpio_reg(vg, pin, BYT_CONF0_REG); in byt_gpio_irq_init_hw()
1655 dev_warn(&vg->pdev->dev, in byt_gpio_irq_init_hw()
1665 } else if ((value & BYT_PIN_MUX) == byt_get_gpio_mux(vg, i)) { in byt_gpio_irq_init_hw()
1666 byt_gpio_clear_triggering(vg, i); in byt_gpio_irq_init_hw()
1672 for (base = 0; base < vg->soc_data->npins; base += 32) { in byt_gpio_irq_init_hw()
1673 reg = byt_gpio_reg(vg, base, BYT_INT_STAT_REG); in byt_gpio_irq_init_hw()
1676 dev_warn(&vg->pdev->dev, in byt_gpio_irq_init_hw()
1687 dev_err(&vg->pdev->dev, in byt_gpio_irq_init_hw()
1693 static int byt_gpio_probe(struct byt_gpio *vg) in byt_gpio_probe() argument
1700 vg->chip = byt_gpio_chip; in byt_gpio_probe()
1701 gc = &vg->chip; in byt_gpio_probe()
1702 gc->label = dev_name(&vg->pdev->dev); in byt_gpio_probe()
1705 gc->parent = &vg->pdev->dev; in byt_gpio_probe()
1706 gc->ngpio = vg->soc_data->npins; in byt_gpio_probe()
1710 vg->saved_context = devm_kcalloc(&vg->pdev->dev, gc->ngpio, in byt_gpio_probe()
1711 sizeof(*vg->saved_context), GFP_KERNEL); in byt_gpio_probe()
1713 ret = devm_gpiochip_add_data(&vg->pdev->dev, gc, vg); in byt_gpio_probe()
1715 dev_err(&vg->pdev->dev, "failed adding byt-gpio chip\n"); in byt_gpio_probe()
1719 ret = gpiochip_add_pin_range(&vg->chip, dev_name(&vg->pdev->dev), in byt_gpio_probe()
1720 0, 0, vg->soc_data->npins); in byt_gpio_probe()
1722 dev_err(&vg->pdev->dev, "failed to add GPIO pin range\n"); in byt_gpio_probe()
1727 irq_rc = platform_get_resource(vg->pdev, IORESOURCE_IRQ, 0); in byt_gpio_probe()
1729 byt_gpio_irq_init_hw(vg); in byt_gpio_probe()
1733 dev_err(&vg->pdev->dev, "failed to add irqchip\n"); in byt_gpio_probe()
1745 static int byt_set_soc_data(struct byt_gpio *vg, in byt_set_soc_data() argument
1750 vg->soc_data = soc_data; in byt_set_soc_data()
1751 vg->communities_copy = devm_kcalloc(&vg->pdev->dev, in byt_set_soc_data()
1753 sizeof(*vg->communities_copy), in byt_set_soc_data()
1755 if (!vg->communities_copy) in byt_set_soc_data()
1759 struct byt_community *comm = vg->communities_copy + i; in byt_set_soc_data()
1762 *comm = vg->soc_data->communities[i]; in byt_set_soc_data()
1764 mem_rc = platform_get_resource(vg->pdev, IORESOURCE_MEM, 0); in byt_set_soc_data()
1765 comm->reg_base = devm_ioremap_resource(&vg->pdev->dev, mem_rc); in byt_set_soc_data()
1786 struct byt_gpio *vg; in byt_pinctrl_probe() local
1809 vg = devm_kzalloc(&pdev->dev, sizeof(*vg), GFP_KERNEL); in byt_pinctrl_probe()
1810 if (!vg) in byt_pinctrl_probe()
1813 vg->pdev = pdev; in byt_pinctrl_probe()
1814 ret = byt_set_soc_data(vg, soc_data); in byt_pinctrl_probe()
1820 vg->pctl_desc = byt_pinctrl_desc; in byt_pinctrl_probe()
1821 vg->pctl_desc.name = dev_name(&pdev->dev); in byt_pinctrl_probe()
1822 vg->pctl_desc.pins = vg->soc_data->pins; in byt_pinctrl_probe()
1823 vg->pctl_desc.npins = vg->soc_data->npins; in byt_pinctrl_probe()
1825 vg->pctl_dev = devm_pinctrl_register(&pdev->dev, &vg->pctl_desc, vg); in byt_pinctrl_probe()
1826 if (IS_ERR(vg->pctl_dev)) { in byt_pinctrl_probe()
1828 return PTR_ERR(vg->pctl_dev); in byt_pinctrl_probe()
1831 raw_spin_lock_init(&vg->lock); in byt_pinctrl_probe()
1833 ret = byt_gpio_probe(vg); in byt_pinctrl_probe()
1837 platform_set_drvdata(pdev, vg); in byt_pinctrl_probe()
1847 struct byt_gpio *vg = platform_get_drvdata(pdev); in byt_gpio_suspend() local
1850 for (i = 0; i < vg->soc_data->npins; i++) { in byt_gpio_suspend()
1853 unsigned int pin = vg->soc_data->pins[i].number; in byt_gpio_suspend()
1855 reg = byt_gpio_reg(vg, pin, BYT_CONF0_REG); in byt_gpio_suspend()
1857 dev_warn(&vg->pdev->dev, in byt_gpio_suspend()
1863 vg->saved_context[i].conf0 = value; in byt_gpio_suspend()
1865 reg = byt_gpio_reg(vg, pin, BYT_VAL_REG); in byt_gpio_suspend()
1867 vg->saved_context[i].val = value; in byt_gpio_suspend()
1876 struct byt_gpio *vg = platform_get_drvdata(pdev); in byt_gpio_resume() local
1879 for (i = 0; i < vg->soc_data->npins; i++) { in byt_gpio_resume()
1882 unsigned int pin = vg->soc_data->pins[i].number; in byt_gpio_resume()
1884 reg = byt_gpio_reg(vg, pin, BYT_CONF0_REG); in byt_gpio_resume()
1886 dev_warn(&vg->pdev->dev, in byt_gpio_resume()
1893 vg->saved_context[i].conf0) { in byt_gpio_resume()
1895 value |= vg->saved_context[i].conf0; in byt_gpio_resume()
1900 reg = byt_gpio_reg(vg, pin, BYT_VAL_REG); in byt_gpio_resume()
1903 vg->saved_context[i].val) { in byt_gpio_resume()
1907 v |= vg->saved_context[i].val; in byt_gpio_resume()