Lines Matching full:pcs
205 #define PCS_QUIRK_HAS_SHARED_IRQ (pcs->flags & PCS_QUIRK_SHARED_IRQ)
206 #define PCS_HAS_IRQ (pcs->flags & PCS_FEAT_IRQ)
207 #define PCS_HAS_PINCONF (pcs->flags & PCS_FEAT_PINCONF)
268 static unsigned int pcs_pin_reg_offset_get(struct pcs_device *pcs, in pcs_pin_reg_offset_get() argument
271 unsigned int mux_bytes = pcs->width / BITS_PER_BYTE; in pcs_pin_reg_offset_get()
273 if (pcs->bits_per_mux) { in pcs_pin_reg_offset_get()
276 pin_offset_bytes = (pcs->bits_per_pin * pin) / BITS_PER_BYTE; in pcs_pin_reg_offset_get()
283 static unsigned int pcs_pin_shift_reg_get(struct pcs_device *pcs, in pcs_pin_shift_reg_get() argument
286 return (pin % (pcs->width / pcs->bits_per_pin)) * pcs->bits_per_pin; in pcs_pin_shift_reg_get()
293 struct pcs_device *pcs; in pcs_pin_dbg_show() local
298 pcs = pinctrl_dev_get_drvdata(pctldev); in pcs_pin_dbg_show()
300 offset = pcs_pin_reg_offset_get(pcs, pin); in pcs_pin_dbg_show()
301 val = pcs->read(pcs->base + offset); in pcs_pin_dbg_show()
303 if (pcs->bits_per_mux) in pcs_pin_dbg_show()
304 val &= pcs->fmask << pcs_pin_shift_reg_get(pcs, pin); in pcs_pin_dbg_show()
306 pa = pcs->res->start + offset; in pcs_pin_dbg_show()
314 struct pcs_device *pcs; in pcs_dt_free_map() local
316 pcs = pinctrl_dev_get_drvdata(pctldev); in pcs_dt_free_map()
317 devm_kfree(pcs->dev, map); in pcs_dt_free_map()
336 struct pcs_device *pcs = pinctrl_dev_get_drvdata(pctldev); in pcs_get_function() local
352 dev_err(pcs->dev, "%s could not find function%i\n", in pcs_get_function()
362 struct pcs_device *pcs; in pcs_set_mux() local
367 pcs = pinctrl_dev_get_drvdata(pctldev); in pcs_set_mux()
369 if (!pcs->fmask) in pcs_set_mux()
378 dev_dbg(pcs->dev, "enabling %s function%i\n", in pcs_set_mux()
387 raw_spin_lock_irqsave(&pcs->lock, flags); in pcs_set_mux()
388 val = pcs->read(vals->reg); in pcs_set_mux()
390 if (pcs->bits_per_mux) in pcs_set_mux()
393 mask = pcs->fmask; in pcs_set_mux()
397 pcs->write(val, vals->reg); in pcs_set_mux()
398 raw_spin_unlock_irqrestore(&pcs->lock, flags); in pcs_set_mux()
407 struct pcs_device *pcs = pinctrl_dev_get_drvdata(pctldev); in pcs_request_gpio() local
413 if (!pcs->fmask) in pcs_request_gpio()
416 list_for_each_safe(pos, tmp, &pcs->gpiofuncs) { in pcs_request_gpio()
424 offset = pcs_pin_reg_offset_get(pcs, pin); in pcs_request_gpio()
426 if (pcs->bits_per_mux) { in pcs_request_gpio()
427 int pin_shift = pcs_pin_shift_reg_get(pcs, pin); in pcs_request_gpio()
429 data = pcs->read(pcs->base + offset); in pcs_request_gpio()
430 data &= ~(pcs->fmask << pin_shift); in pcs_request_gpio()
432 pcs->write(data, pcs->base + offset); in pcs_request_gpio()
434 data = pcs->read(pcs->base + offset); in pcs_request_gpio()
435 data &= ~pcs->fmask; in pcs_request_gpio()
437 pcs->write(data, pcs->base + offset); in pcs_request_gpio()
485 struct pcs_device *pcs = pinctrl_dev_get_drvdata(pctldev); in pcs_pinconf_get() local
508 offset = pin * (pcs->width / BITS_PER_BYTE); in pcs_pinconf_get()
509 data = pcs->read(pcs->base + offset) & func->conf[i].mask; in pcs_pinconf_get()
551 struct pcs_device *pcs = pinctrl_dev_get_drvdata(pctldev); in pcs_pinconf_set() local
576 offset = pin * (pcs->width / BITS_PER_BYTE); in pcs_pinconf_set()
577 data = pcs->read(pcs->base + offset); in pcs_pinconf_set()
595 data = pcs->read(pcs->base + offset); in pcs_pinconf_set()
608 pcs->write(data, pcs->base + offset); in pcs_pinconf_set()
689 * @pcs: pcs driver instance
692 static int pcs_add_pin(struct pcs_device *pcs, unsigned int offset) in pcs_add_pin() argument
694 struct pcs_soc_data *pcs_soc = &pcs->socdata; in pcs_add_pin()
698 i = pcs->pins.cur; in pcs_add_pin()
699 if (i >= pcs->desc.npins) { in pcs_add_pin()
700 dev_err(pcs->dev, "too many pins, max %i\n", in pcs_add_pin()
701 pcs->desc.npins); in pcs_add_pin()
708 val = pcs->read(pcs->base + offset); in pcs_add_pin()
710 dev_dbg(pcs->dev, "irq enabled at boot for pin at %lx (%x), clearing\n", in pcs_add_pin()
711 (unsigned long)pcs->res->start + offset, val); in pcs_add_pin()
713 pcs->write(val, pcs->base + offset); in pcs_add_pin()
717 pin = &pcs->pins.pa[i]; in pcs_add_pin()
719 pcs->pins.cur++; in pcs_add_pin()
726 * @pcs: pcs driver instance
733 static int pcs_allocate_pin_table(struct pcs_device *pcs) in pcs_allocate_pin_table() argument
737 mux_bytes = pcs->width / BITS_PER_BYTE; in pcs_allocate_pin_table()
739 if (pcs->bits_per_mux && pcs->fmask) { in pcs_allocate_pin_table()
740 pcs->bits_per_pin = fls(pcs->fmask); in pcs_allocate_pin_table()
741 nr_pins = (pcs->size * BITS_PER_BYTE) / pcs->bits_per_pin; in pcs_allocate_pin_table()
743 nr_pins = pcs->size / mux_bytes; in pcs_allocate_pin_table()
746 dev_dbg(pcs->dev, "allocating %i pins\n", nr_pins); in pcs_allocate_pin_table()
747 pcs->pins.pa = devm_kcalloc(pcs->dev, in pcs_allocate_pin_table()
748 nr_pins, sizeof(*pcs->pins.pa), in pcs_allocate_pin_table()
750 if (!pcs->pins.pa) in pcs_allocate_pin_table()
753 pcs->desc.pins = pcs->pins.pa; in pcs_allocate_pin_table()
754 pcs->desc.npins = nr_pins; in pcs_allocate_pin_table()
756 for (i = 0; i < pcs->desc.npins; i++) { in pcs_allocate_pin_table()
760 offset = pcs_pin_reg_offset_get(pcs, i); in pcs_allocate_pin_table()
761 res = pcs_add_pin(pcs, offset); in pcs_allocate_pin_table()
763 dev_err(pcs->dev, "error adding pins: %i\n", res); in pcs_allocate_pin_table()
773 * @pcs: pcs driver instance
783 static int pcs_add_function(struct pcs_device *pcs, in pcs_add_function() argument
794 function = devm_kzalloc(pcs->dev, sizeof(*function), GFP_KERNEL); in pcs_add_function()
802 selector = pinmux_generic_add_function(pcs->pctl, name, in pcs_add_function()
806 devm_kfree(pcs->dev, function); in pcs_add_function()
817 * @pcs: pcs driver instance
822 static int pcs_get_pin_by_offset(struct pcs_device *pcs, unsigned offset) in pcs_get_pin_by_offset() argument
826 if (offset >= pcs->size) { in pcs_get_pin_by_offset()
827 dev_err(pcs->dev, "mux offset out of range: 0x%x (0x%x)\n", in pcs_get_pin_by_offset()
828 offset, pcs->size); in pcs_get_pin_by_offset()
832 if (pcs->bits_per_mux) in pcs_get_pin_by_offset()
833 index = (offset * BITS_PER_BYTE) / pcs->bits_per_pin; in pcs_get_pin_by_offset()
835 index = offset / (pcs->width / BITS_PER_BYTE); in pcs_get_pin_by_offset()
876 static void pcs_add_conf2(struct pcs_device *pcs, struct device_node *np, in pcs_add_conf2() argument
895 static void pcs_add_conf4(struct pcs_device *pcs, struct device_node *np, in pcs_add_conf4() argument
907 dev_err(pcs->dev, "mask field of the property can't be 0\n"); in pcs_add_conf4()
915 dev_dbg(pcs->dev, "failed to match enable or disable bits\n"); in pcs_add_conf4()
920 static int pcs_parse_pinconf(struct pcs_device *pcs, struct device_node *np, in pcs_parse_pinconf() argument
959 func->conf = devm_kcalloc(pcs->dev, in pcs_parse_pinconf()
967 settings = devm_kcalloc(pcs->dev, nconfs, sizeof(unsigned long), in pcs_parse_pinconf()
974 pcs_add_conf2(pcs, np, prop2[i].name, prop2[i].param, in pcs_parse_pinconf()
977 pcs_add_conf4(pcs, np, prop4[i].name, prop4[i].param, in pcs_parse_pinconf()
988 * @pcs: pinctrl driver instance
1005 static int pcs_parse_one_pinctrl_entry(struct pcs_device *pcs, in pcs_parse_one_pinctrl_entry() argument
1018 dev_err(pcs->dev, "Invalid number of rows: %d\n", rows); in pcs_parse_one_pinctrl_entry()
1022 vals = devm_kcalloc(pcs->dev, rows, sizeof(*vals), GFP_KERNEL); in pcs_parse_one_pinctrl_entry()
1026 pins = devm_kcalloc(pcs->dev, rows, sizeof(*pins), GFP_KERNEL); in pcs_parse_one_pinctrl_entry()
1040 dev_err(pcs->dev, "invalid args_count for spec: %i\n", in pcs_parse_one_pinctrl_entry()
1046 vals[found].reg = pcs->base + offset; in pcs_parse_one_pinctrl_entry()
1057 dev_dbg(pcs->dev, "%pOFn index: 0x%x value: 0x%x\n", in pcs_parse_one_pinctrl_entry()
1060 pin = pcs_get_pin_by_offset(pcs, offset); in pcs_parse_one_pinctrl_entry()
1062 dev_err(pcs->dev, in pcs_parse_one_pinctrl_entry()
1071 mutex_lock(&pcs->mutex); in pcs_parse_one_pinctrl_entry()
1072 fsel = pcs_add_function(pcs, &function, np->name, vals, found, in pcs_parse_one_pinctrl_entry()
1079 gsel = pinctrl_generic_add_group(pcs->pctl, np->name, pins, found, pcs); in pcs_parse_one_pinctrl_entry()
1090 res = pcs_parse_pinconf(pcs, np, function, map); in pcs_parse_one_pinctrl_entry()
1100 mutex_unlock(&pcs->mutex); in pcs_parse_one_pinctrl_entry()
1105 pinctrl_generic_remove_group(pcs->pctl, gsel); in pcs_parse_one_pinctrl_entry()
1108 pinmux_generic_remove_function(pcs->pctl, fsel); in pcs_parse_one_pinctrl_entry()
1110 mutex_unlock(&pcs->mutex); in pcs_parse_one_pinctrl_entry()
1111 devm_kfree(pcs->dev, pins); in pcs_parse_one_pinctrl_entry()
1114 devm_kfree(pcs->dev, vals); in pcs_parse_one_pinctrl_entry()
1119 static int pcs_parse_bits_in_pinctrl_entry(struct pcs_device *pcs, in pcs_parse_bits_in_pinctrl_entry() argument
1133 dev_err(pcs->dev, "Invalid number of rows: %d\n", rows); in pcs_parse_bits_in_pinctrl_entry()
1138 dev_err(pcs->dev, "pinconf not supported\n"); in pcs_parse_bits_in_pinctrl_entry()
1142 npins_in_row = pcs->width / pcs->bits_per_pin; in pcs_parse_bits_in_pinctrl_entry()
1144 vals = devm_kzalloc(pcs->dev, in pcs_parse_bits_in_pinctrl_entry()
1150 pins = devm_kzalloc(pcs->dev, in pcs_parse_bits_in_pinctrl_entry()
1168 dev_err(pcs->dev, "invalid args_count for spec: %i\n", in pcs_parse_bits_in_pinctrl_entry()
1178 dev_dbg(pcs->dev, "%pOFn index: 0x%x value: 0x%x mask: 0x%x\n", in pcs_parse_bits_in_pinctrl_entry()
1184 pin_num_from_lsb = bit_pos / pcs->bits_per_pin; in pcs_parse_bits_in_pinctrl_entry()
1185 mask_pos = ((pcs->fmask) << bit_pos); in pcs_parse_bits_in_pinctrl_entry()
1190 dev_err(pcs->dev, in pcs_parse_bits_in_pinctrl_entry()
1199 dev_warn(pcs->dev, in pcs_parse_bits_in_pinctrl_entry()
1206 vals[found].reg = pcs->base + offset; in pcs_parse_bits_in_pinctrl_entry()
1209 pin = pcs_get_pin_by_offset(pcs, offset); in pcs_parse_bits_in_pinctrl_entry()
1211 dev_err(pcs->dev, in pcs_parse_bits_in_pinctrl_entry()
1221 mutex_lock(&pcs->mutex); in pcs_parse_bits_in_pinctrl_entry()
1222 fsel = pcs_add_function(pcs, &function, np->name, vals, found, in pcs_parse_bits_in_pinctrl_entry()
1229 res = pinctrl_generic_add_group(pcs->pctl, np->name, pins, found, pcs); in pcs_parse_bits_in_pinctrl_entry()
1238 mutex_unlock(&pcs->mutex); in pcs_parse_bits_in_pinctrl_entry()
1243 pinmux_generic_remove_function(pcs->pctl, fsel); in pcs_parse_bits_in_pinctrl_entry()
1245 mutex_unlock(&pcs->mutex); in pcs_parse_bits_in_pinctrl_entry()
1246 devm_kfree(pcs->dev, pins); in pcs_parse_bits_in_pinctrl_entry()
1249 devm_kfree(pcs->dev, vals); in pcs_parse_bits_in_pinctrl_entry()
1264 struct pcs_device *pcs; in pcs_dt_node_to_map() local
1268 pcs = pinctrl_dev_get_drvdata(pctldev); in pcs_dt_node_to_map()
1271 *map = devm_kcalloc(pcs->dev, 2, sizeof(**map), GFP_KERNEL); in pcs_dt_node_to_map()
1277 pgnames = devm_kzalloc(pcs->dev, sizeof(*pgnames), GFP_KERNEL); in pcs_dt_node_to_map()
1283 if (pcs->bits_per_mux) { in pcs_dt_node_to_map()
1284 ret = pcs_parse_bits_in_pinctrl_entry(pcs, np_config, map, in pcs_dt_node_to_map()
1287 dev_err(pcs->dev, "no pins entries for %pOFn\n", in pcs_dt_node_to_map()
1292 ret = pcs_parse_one_pinctrl_entry(pcs, np_config, map, in pcs_dt_node_to_map()
1295 dev_err(pcs->dev, "no pins entries for %pOFn\n", in pcs_dt_node_to_map()
1304 devm_kfree(pcs->dev, pgnames); in pcs_dt_node_to_map()
1306 devm_kfree(pcs->dev, *map); in pcs_dt_node_to_map()
1313 * @pcs: pcs driver instance
1315 static void pcs_irq_free(struct pcs_device *pcs) in pcs_irq_free() argument
1317 struct pcs_soc_data *pcs_soc = &pcs->socdata; in pcs_irq_free()
1322 if (pcs->domain) in pcs_irq_free()
1323 irq_domain_remove(pcs->domain); in pcs_irq_free()
1333 * @pcs: pcs driver instance
1335 static void pcs_free_resources(struct pcs_device *pcs) in pcs_free_resources() argument
1337 pcs_irq_free(pcs); in pcs_free_resources()
1340 if (pcs->missing_nr_pinctrl_cells) in pcs_free_resources()
1341 of_remove_property(pcs->np, pcs->missing_nr_pinctrl_cells); in pcs_free_resources()
1345 static int pcs_add_gpio_func(struct device_node *node, struct pcs_device *pcs) in pcs_add_gpio_func() argument
1361 range = devm_kzalloc(pcs->dev, sizeof(*range), GFP_KERNEL); in pcs_add_gpio_func()
1370 mutex_lock(&pcs->mutex); in pcs_add_gpio_func()
1371 list_add_tail(&range->node, &pcs->gpiofuncs); in pcs_add_gpio_func()
1372 mutex_unlock(&pcs->mutex); in pcs_add_gpio_func()
1404 struct pcs_device *pcs; in pcs_irq_set() local
1408 pcs = container_of(pcs_soc, struct pcs_device, socdata); in pcs_irq_set()
1409 list_for_each(pos, &pcs->irqs) { in pcs_irq_set()
1418 raw_spin_lock(&pcs->lock); in pcs_irq_set()
1419 mask = pcs->read(pcswi->reg); in pcs_irq_set()
1424 pcs->write(mask, pcswi->reg); in pcs_irq_set()
1427 mask = pcs->read(pcswi->reg); in pcs_irq_set()
1428 raw_spin_unlock(&pcs->lock); in pcs_irq_set()
1485 struct pcs_device *pcs; in pcs_irq_handle() local
1489 pcs = container_of(pcs_soc, struct pcs_device, socdata); in pcs_irq_handle()
1490 list_for_each(pos, &pcs->irqs) { in pcs_irq_handle()
1495 raw_spin_lock(&pcs->lock); in pcs_irq_handle()
1496 mask = pcs->read(pcswi->reg); in pcs_irq_handle()
1497 raw_spin_unlock(&pcs->lock); in pcs_irq_handle()
1499 generic_handle_domain_irq(pcs->domain, in pcs_irq_handle()
1546 struct pcs_device *pcs; in pcs_irqdomain_map() local
1549 pcs = container_of(pcs_soc, struct pcs_device, socdata); in pcs_irqdomain_map()
1550 pcswi = devm_kzalloc(pcs->dev, sizeof(*pcswi), GFP_KERNEL); in pcs_irqdomain_map()
1554 pcswi->reg = pcs->base + hwirq; in pcs_irqdomain_map()
1558 mutex_lock(&pcs->mutex); in pcs_irqdomain_map()
1559 list_add_tail(&pcswi->node, &pcs->irqs); in pcs_irqdomain_map()
1560 mutex_unlock(&pcs->mutex); in pcs_irqdomain_map()
1563 irq_set_chip_and_handler(irq, &pcs->chip, in pcs_irqdomain_map()
1578 * @pcs: pcs driver instance
1581 static int pcs_irq_init_chained_handler(struct pcs_device *pcs, in pcs_irq_init_chained_handler() argument
1584 struct pcs_soc_data *pcs_soc = &pcs->socdata; in pcs_irq_init_chained_handler()
1594 INIT_LIST_HEAD(&pcs->irqs); in pcs_irq_init_chained_handler()
1595 pcs->chip.name = name; in pcs_irq_init_chained_handler()
1596 pcs->chip.irq_ack = pcs_irq_mask; in pcs_irq_init_chained_handler()
1597 pcs->chip.irq_mask = pcs_irq_mask; in pcs_irq_init_chained_handler()
1598 pcs->chip.irq_unmask = pcs_irq_unmask; in pcs_irq_init_chained_handler()
1599 pcs->chip.irq_set_wake = pcs_irq_set_wake; in pcs_irq_init_chained_handler()
1624 num_irqs = pcs->size; in pcs_irq_init_chained_handler()
1626 pcs->domain = irq_domain_create_simple(of_fwnode_handle(np), in pcs_irq_init_chained_handler()
1630 if (!pcs->domain) { in pcs_irq_init_chained_handler()
1631 pcs_irq_free(pcs); in pcs_irq_init_chained_handler()
1639 static int pcs_save_context(struct pcs_device *pcs) in pcs_save_context() argument
1646 mux_bytes = pcs->width / BITS_PER_BYTE; in pcs_save_context()
1648 if (!pcs->saved_vals) { in pcs_save_context()
1649 pcs->saved_vals = devm_kzalloc(pcs->dev, pcs->size, GFP_ATOMIC); in pcs_save_context()
1650 if (!pcs->saved_vals) in pcs_save_context()
1654 switch (pcs->width) { in pcs_save_context()
1656 regsl = pcs->saved_vals; in pcs_save_context()
1657 for (i = 0; i < pcs->size; i += mux_bytes) in pcs_save_context()
1658 *regsl++ = pcs->read(pcs->base + i); in pcs_save_context()
1661 regsw = pcs->saved_vals; in pcs_save_context()
1662 for (i = 0; i < pcs->size; i += mux_bytes) in pcs_save_context()
1663 *regsw++ = pcs->read(pcs->base + i); in pcs_save_context()
1666 regshw = pcs->saved_vals; in pcs_save_context()
1667 for (i = 0; i < pcs->size; i += mux_bytes) in pcs_save_context()
1668 *regshw++ = pcs->read(pcs->base + i); in pcs_save_context()
1675 static void pcs_restore_context(struct pcs_device *pcs) in pcs_restore_context() argument
1682 mux_bytes = pcs->width / BITS_PER_BYTE; in pcs_restore_context()
1684 switch (pcs->width) { in pcs_restore_context()
1686 regsl = pcs->saved_vals; in pcs_restore_context()
1687 for (i = 0; i < pcs->size; i += mux_bytes) in pcs_restore_context()
1688 pcs->write(*regsl++, pcs->base + i); in pcs_restore_context()
1691 regsw = pcs->saved_vals; in pcs_restore_context()
1692 for (i = 0; i < pcs->size; i += mux_bytes) in pcs_restore_context()
1693 pcs->write(*regsw++, pcs->base + i); in pcs_restore_context()
1696 regshw = pcs->saved_vals; in pcs_restore_context()
1697 for (i = 0; i < pcs->size; i += mux_bytes) in pcs_restore_context()
1698 pcs->write(*regshw++, pcs->base + i); in pcs_restore_context()
1705 struct pcs_device *pcs = dev_get_drvdata(dev); in pinctrl_single_suspend_noirq() local
1707 if (pcs->flags & PCS_CONTEXT_LOSS_OFF) { in pinctrl_single_suspend_noirq()
1710 ret = pcs_save_context(pcs); in pinctrl_single_suspend_noirq()
1715 return pinctrl_force_sleep(pcs->pctl); in pinctrl_single_suspend_noirq()
1720 struct pcs_device *pcs = dev_get_drvdata(dev); in pinctrl_single_resume_noirq() local
1722 if (pcs->flags & PCS_CONTEXT_LOSS_OFF) in pinctrl_single_resume_noirq()
1723 pcs_restore_context(pcs); in pinctrl_single_resume_noirq()
1725 return pinctrl_force_default(pcs->pctl); in pinctrl_single_resume_noirq()
1734 * @pcs: pinctrl driver instance
1742 static int pcs_quirk_missing_pinctrl_cells(struct pcs_device *pcs, in pcs_quirk_missing_pinctrl_cells() argument
1755 dev_warn(pcs->dev, "please update dts to use %s = <%i>\n", in pcs_quirk_missing_pinctrl_cells()
1758 p = devm_kzalloc(pcs->dev, sizeof(*p), GFP_KERNEL); in pcs_quirk_missing_pinctrl_cells()
1763 p->value = devm_kzalloc(pcs->dev, sizeof(__be32), GFP_KERNEL); in pcs_quirk_missing_pinctrl_cells()
1768 p->name = devm_kstrdup(pcs->dev, name, GFP_KERNEL); in pcs_quirk_missing_pinctrl_cells()
1772 pcs->missing_nr_pinctrl_cells = p; in pcs_quirk_missing_pinctrl_cells()
1775 error = of_add_property(np, pcs->missing_nr_pinctrl_cells); in pcs_quirk_missing_pinctrl_cells()
1786 struct pcs_device *pcs; in pcs_probe() local
1794 pcs = devm_kzalloc(&pdev->dev, sizeof(*pcs), GFP_KERNEL); in pcs_probe()
1795 if (!pcs) in pcs_probe()
1798 pcs->dev = &pdev->dev; in pcs_probe()
1799 pcs->np = np; in pcs_probe()
1800 raw_spin_lock_init(&pcs->lock); in pcs_probe()
1801 mutex_init(&pcs->mutex); in pcs_probe()
1802 INIT_LIST_HEAD(&pcs->gpiofuncs); in pcs_probe()
1803 pcs->flags = soc->flags; in pcs_probe()
1804 memcpy(&pcs->socdata, soc, sizeof(*soc)); in pcs_probe()
1807 &pcs->width); in pcs_probe()
1809 dev_err(pcs->dev, "register width not specified\n"); in pcs_probe()
1815 &pcs->fmask); in pcs_probe()
1817 pcs->fshift = __ffs(pcs->fmask); in pcs_probe()
1818 pcs->fmax = pcs->fmask >> pcs->fshift; in pcs_probe()
1821 pcs->fmask = 0; in pcs_probe()
1822 pcs->fshift = 0; in pcs_probe()
1823 pcs->fmax = 0; in pcs_probe()
1827 &pcs->foff); in pcs_probe()
1829 pcs->foff = PCS_OFF_DISABLED; in pcs_probe()
1831 pcs->bits_per_mux = of_property_read_bool(np, in pcs_probe()
1833 ret = pcs_quirk_missing_pinctrl_cells(pcs, np, in pcs_probe()
1834 pcs->bits_per_mux ? 2 : 1); in pcs_probe()
1843 dev_err(pcs->dev, "could not get resource\n"); in pcs_probe()
1847 pcs->res = devm_request_mem_region(pcs->dev, res->start, in pcs_probe()
1849 if (!pcs->res) { in pcs_probe()
1850 dev_err(pcs->dev, "could not get mem_region\n"); in pcs_probe()
1854 pcs->size = resource_size(pcs->res); in pcs_probe()
1855 pcs->base = devm_ioremap(pcs->dev, pcs->res->start, pcs->size); in pcs_probe()
1856 if (!pcs->base) { in pcs_probe()
1857 dev_err(pcs->dev, "could not ioremap\n"); in pcs_probe()
1861 platform_set_drvdata(pdev, pcs); in pcs_probe()
1863 switch (pcs->width) { in pcs_probe()
1865 pcs->read = pcs_readb; in pcs_probe()
1866 pcs->write = pcs_writeb; in pcs_probe()
1869 pcs->read = pcs_readw; in pcs_probe()
1870 pcs->write = pcs_writew; in pcs_probe()
1873 pcs->read = pcs_readl; in pcs_probe()
1874 pcs->write = pcs_writel; in pcs_probe()
1880 pcs->desc.name = DRIVER_NAME; in pcs_probe()
1881 pcs->desc.pctlops = &pcs_pinctrl_ops; in pcs_probe()
1882 pcs->desc.pmxops = &pcs_pinmux_ops; in pcs_probe()
1884 pcs->desc.confops = &pcs_pinconf_ops; in pcs_probe()
1885 pcs->desc.owner = THIS_MODULE; in pcs_probe()
1887 ret = pcs_allocate_pin_table(pcs); in pcs_probe()
1891 ret = devm_pinctrl_register_and_init(pcs->dev, &pcs->desc, pcs, &pcs->pctl); in pcs_probe()
1893 dev_err(pcs->dev, "could not register single pinctrl driver\n"); in pcs_probe()
1897 ret = pcs_add_gpio_func(np, pcs); in pcs_probe()
1901 pcs->socdata.irq = irq_of_parse_and_map(np, 0); in pcs_probe()
1902 if (pcs->socdata.irq) in pcs_probe()
1903 pcs->flags |= PCS_FEAT_IRQ; in pcs_probe()
1909 pcs->socdata.rearm = pdata->rearm; in pcs_probe()
1911 pcs->socdata.irq = pdata->irq; in pcs_probe()
1912 pcs->flags |= PCS_FEAT_IRQ; in pcs_probe()
1917 ret = pcs_irq_init_chained_handler(pcs, np); in pcs_probe()
1919 dev_warn(pcs->dev, "initialized with no interrupts\n"); in pcs_probe()
1922 dev_info(pcs->dev, "%i pins, size %u\n", pcs->desc.npins, pcs->size); in pcs_probe()
1924 ret = pinctrl_enable(pcs->pctl); in pcs_probe()
1930 pcs_free_resources(pcs); in pcs_probe()
1937 struct pcs_device *pcs = platform_get_drvdata(pdev); in pcs_remove() local
1939 pcs_free_resources(pcs); in pcs_remove()