Lines Matching refs:pcs
243 #define PCS_QUIRK_HAS_SHARED_IRQ (pcs->flags & PCS_QUIRK_SHARED_IRQ)
244 #define PCS_HAS_IRQ (pcs->flags & PCS_FEAT_IRQ)
245 #define PCS_HAS_PINCONF (pcs->flags & PCS_FEAT_PINCONF)
298 struct pcs_device *pcs; in pcs_get_groups_count() local
300 pcs = pinctrl_dev_get_drvdata(pctldev); in pcs_get_groups_count()
302 return pcs->ngroups; in pcs_get_groups_count()
308 struct pcs_device *pcs; in pcs_get_group_name() local
311 pcs = pinctrl_dev_get_drvdata(pctldev); in pcs_get_group_name()
312 group = radix_tree_lookup(&pcs->pgtree, gselector); in pcs_get_group_name()
314 dev_err(pcs->dev, "%s could not find pingroup%i\n", in pcs_get_group_name()
327 struct pcs_device *pcs; in pcs_get_group_pins() local
330 pcs = pinctrl_dev_get_drvdata(pctldev); in pcs_get_group_pins()
331 group = radix_tree_lookup(&pcs->pgtree, gselector); in pcs_get_group_pins()
333 dev_err(pcs->dev, "%s could not find pingroup%i\n", in pcs_get_group_pins()
348 struct pcs_device *pcs; in pcs_pin_dbg_show() local
351 pcs = pinctrl_dev_get_drvdata(pctldev); in pcs_pin_dbg_show()
353 mux_bytes = pcs->width / BITS_PER_BYTE; in pcs_pin_dbg_show()
354 val = pcs->read(pcs->base + pin * mux_bytes); in pcs_pin_dbg_show()
362 struct pcs_device *pcs; in pcs_dt_free_map() local
364 pcs = pinctrl_dev_get_drvdata(pctldev); in pcs_dt_free_map()
365 devm_kfree(pcs->dev, map); in pcs_dt_free_map()
383 struct pcs_device *pcs; in pcs_get_functions_count() local
385 pcs = pinctrl_dev_get_drvdata(pctldev); in pcs_get_functions_count()
387 return pcs->nfuncs; in pcs_get_functions_count()
393 struct pcs_device *pcs; in pcs_get_function_name() local
396 pcs = pinctrl_dev_get_drvdata(pctldev); in pcs_get_function_name()
397 func = radix_tree_lookup(&pcs->ftree, fselector); in pcs_get_function_name()
399 dev_err(pcs->dev, "%s could not find function%i\n", in pcs_get_function_name()
412 struct pcs_device *pcs; in pcs_get_function_groups() local
415 pcs = pinctrl_dev_get_drvdata(pctldev); in pcs_get_function_groups()
416 func = radix_tree_lookup(&pcs->ftree, fselector); in pcs_get_function_groups()
418 dev_err(pcs->dev, "%s could not find function%i\n", in pcs_get_function_groups()
431 struct pcs_device *pcs = pinctrl_dev_get_drvdata(pctldev); in pcs_get_function() local
441 *func = radix_tree_lookup(&pcs->ftree, fselector); in pcs_get_function()
443 dev_err(pcs->dev, "%s could not find function%i\n", in pcs_get_function()
453 struct pcs_device *pcs; in pcs_set_mux() local
457 pcs = pinctrl_dev_get_drvdata(pctldev); in pcs_set_mux()
459 if (!pcs->fmask) in pcs_set_mux()
461 func = radix_tree_lookup(&pcs->ftree, fselector); in pcs_set_mux()
465 dev_dbg(pcs->dev, "enabling %s function%i\n", in pcs_set_mux()
474 raw_spin_lock_irqsave(&pcs->lock, flags); in pcs_set_mux()
475 val = pcs->read(vals->reg); in pcs_set_mux()
477 if (pcs->bits_per_mux) in pcs_set_mux()
480 mask = pcs->fmask; in pcs_set_mux()
484 pcs->write(val, vals->reg); in pcs_set_mux()
485 raw_spin_unlock_irqrestore(&pcs->lock, flags); in pcs_set_mux()
494 struct pcs_device *pcs = pinctrl_dev_get_drvdata(pctldev); in pcs_request_gpio() local
501 if (!pcs->fmask) in pcs_request_gpio()
504 list_for_each_safe(pos, tmp, &pcs->gpiofuncs) { in pcs_request_gpio()
509 mux_bytes = pcs->width / BITS_PER_BYTE; in pcs_request_gpio()
510 data = pcs->read(pcs->base + pin * mux_bytes) & ~pcs->fmask; in pcs_request_gpio()
512 pcs->write(data, pcs->base + pin * mux_bytes); in pcs_request_gpio()
559 struct pcs_device *pcs = pinctrl_dev_get_drvdata(pctldev); in pcs_pinconf_get() local
581 offset = pin * (pcs->width / BITS_PER_BYTE); in pcs_pinconf_get()
582 data = pcs->read(pcs->base + offset) & func->conf[i].mask; in pcs_pinconf_get()
623 struct pcs_device *pcs = pinctrl_dev_get_drvdata(pctldev); in pcs_pinconf_set() local
639 offset = pin * (pcs->width / BITS_PER_BYTE); in pcs_pinconf_set()
640 data = pcs->read(pcs->base + offset); in pcs_pinconf_set()
671 pcs->write(data, pcs->base + offset); in pcs_pinconf_set()
754 static int pcs_add_pin(struct pcs_device *pcs, unsigned offset, in pcs_add_pin() argument
757 struct pcs_soc_data *pcs_soc = &pcs->socdata; in pcs_add_pin()
762 i = pcs->pins.cur; in pcs_add_pin()
763 if (i >= pcs->desc.npins) { in pcs_add_pin()
764 dev_err(pcs->dev, "too many pins, max %i\n", in pcs_add_pin()
765 pcs->desc.npins); in pcs_add_pin()
772 val = pcs->read(pcs->base + offset); in pcs_add_pin()
774 dev_dbg(pcs->dev, "irq enabled at boot for pin at %lx (%x), clearing\n", in pcs_add_pin()
775 (unsigned long)pcs->res->start + offset, val); in pcs_add_pin()
777 pcs->write(val, pcs->base + offset); in pcs_add_pin()
781 pin = &pcs->pins.pa[i]; in pcs_add_pin()
782 pn = &pcs->names[i]; in pcs_add_pin()
784 (unsigned long)pcs->res->start + offset, pin_pos); in pcs_add_pin()
787 pcs->pins.cur++; in pcs_add_pin()
801 static int pcs_allocate_pin_table(struct pcs_device *pcs) in pcs_allocate_pin_table() argument
806 mux_bytes = pcs->width / BITS_PER_BYTE; in pcs_allocate_pin_table()
808 if (pcs->bits_per_mux) { in pcs_allocate_pin_table()
809 pcs->bits_per_pin = fls(pcs->fmask); in pcs_allocate_pin_table()
810 nr_pins = (pcs->size * BITS_PER_BYTE) / pcs->bits_per_pin; in pcs_allocate_pin_table()
811 num_pins_in_register = pcs->width / pcs->bits_per_pin; in pcs_allocate_pin_table()
813 nr_pins = pcs->size / mux_bytes; in pcs_allocate_pin_table()
816 dev_dbg(pcs->dev, "allocating %i pins\n", nr_pins); in pcs_allocate_pin_table()
817 pcs->pins.pa = devm_kzalloc(pcs->dev, in pcs_allocate_pin_table()
818 sizeof(*pcs->pins.pa) * nr_pins, in pcs_allocate_pin_table()
820 if (!pcs->pins.pa) in pcs_allocate_pin_table()
823 pcs->names = devm_kzalloc(pcs->dev, in pcs_allocate_pin_table()
826 if (!pcs->names) in pcs_allocate_pin_table()
829 pcs->desc.pins = pcs->pins.pa; in pcs_allocate_pin_table()
830 pcs->desc.npins = nr_pins; in pcs_allocate_pin_table()
832 for (i = 0; i < pcs->desc.npins; i++) { in pcs_allocate_pin_table()
838 if (pcs->bits_per_mux) { in pcs_allocate_pin_table()
839 byte_num = (pcs->bits_per_pin * i) / BITS_PER_BYTE; in pcs_allocate_pin_table()
845 res = pcs_add_pin(pcs, offset, pin_pos); in pcs_allocate_pin_table()
847 dev_err(pcs->dev, "error adding pins: %i\n", res); in pcs_allocate_pin_table()
865 static struct pcs_function *pcs_add_function(struct pcs_device *pcs, in pcs_add_function() argument
875 function = devm_kzalloc(pcs->dev, sizeof(*function), GFP_KERNEL); in pcs_add_function()
885 mutex_lock(&pcs->mutex); in pcs_add_function()
886 list_add_tail(&function->node, &pcs->functions); in pcs_add_function()
887 radix_tree_insert(&pcs->ftree, pcs->nfuncs, function); in pcs_add_function()
888 pcs->nfuncs++; in pcs_add_function()
889 mutex_unlock(&pcs->mutex); in pcs_add_function()
894 static void pcs_remove_function(struct pcs_device *pcs, in pcs_remove_function() argument
899 mutex_lock(&pcs->mutex); in pcs_remove_function()
900 for (i = 0; i < pcs->nfuncs; i++) { in pcs_remove_function()
903 found = radix_tree_lookup(&pcs->ftree, i); in pcs_remove_function()
905 radix_tree_delete(&pcs->ftree, i); in pcs_remove_function()
908 mutex_unlock(&pcs->mutex); in pcs_remove_function()
919 static int pcs_add_pingroup(struct pcs_device *pcs, in pcs_add_pingroup() argument
927 pingroup = devm_kzalloc(pcs->dev, sizeof(*pingroup), GFP_KERNEL); in pcs_add_pingroup()
936 mutex_lock(&pcs->mutex); in pcs_add_pingroup()
937 list_add_tail(&pingroup->node, &pcs->pingroups); in pcs_add_pingroup()
938 radix_tree_insert(&pcs->pgtree, pcs->ngroups, pingroup); in pcs_add_pingroup()
939 pcs->ngroups++; in pcs_add_pingroup()
940 mutex_unlock(&pcs->mutex); in pcs_add_pingroup()
952 static int pcs_get_pin_by_offset(struct pcs_device *pcs, unsigned offset) in pcs_get_pin_by_offset() argument
956 if (offset >= pcs->size) { in pcs_get_pin_by_offset()
957 dev_err(pcs->dev, "mux offset out of range: 0x%x (0x%x)\n", in pcs_get_pin_by_offset()
958 offset, pcs->size); in pcs_get_pin_by_offset()
962 if (pcs->bits_per_mux) in pcs_get_pin_by_offset()
963 index = (offset * BITS_PER_BYTE) / pcs->bits_per_pin; in pcs_get_pin_by_offset()
965 index = offset / (pcs->width / BITS_PER_BYTE); in pcs_get_pin_by_offset()
1006 static void pcs_add_conf2(struct pcs_device *pcs, struct device_node *np, in pcs_add_conf2() argument
1025 static void pcs_add_conf4(struct pcs_device *pcs, struct device_node *np, in pcs_add_conf4() argument
1037 dev_err(pcs->dev, "mask field of the property can't be 0\n"); in pcs_add_conf4()
1045 dev_dbg(pcs->dev, "failed to match enable or disable bits\n"); in pcs_add_conf4()
1050 static int pcs_parse_pinconf(struct pcs_device *pcs, struct device_node *np, in pcs_parse_pinconf() argument
1088 func->conf = devm_kzalloc(pcs->dev, in pcs_parse_pinconf()
1096 settings = devm_kzalloc(pcs->dev, sizeof(unsigned long) * nconfs, in pcs_parse_pinconf()
1103 pcs_add_conf2(pcs, np, prop2[i].name, prop2[i].param, in pcs_parse_pinconf()
1106 pcs_add_conf4(pcs, np, prop4[i].name, prop4[i].param, in pcs_parse_pinconf()
1115 static void pcs_free_pingroups(struct pcs_device *pcs);
1136 static int pcs_parse_one_pinctrl_entry(struct pcs_device *pcs, in pcs_parse_one_pinctrl_entry() argument
1149 dev_err(pcs->dev, "bad data for mux %s\n", in pcs_parse_one_pinctrl_entry()
1157 vals = devm_kzalloc(pcs->dev, sizeof(*vals) * rows, GFP_KERNEL); in pcs_parse_one_pinctrl_entry()
1161 pins = devm_kzalloc(pcs->dev, sizeof(*pins) * rows, GFP_KERNEL); in pcs_parse_one_pinctrl_entry()
1171 vals[found].reg = pcs->base + offset; in pcs_parse_one_pinctrl_entry()
1174 pin = pcs_get_pin_by_offset(pcs, offset); in pcs_parse_one_pinctrl_entry()
1176 dev_err(pcs->dev, in pcs_parse_one_pinctrl_entry()
1185 function = pcs_add_function(pcs, np, np->name, vals, found, pgnames, 1); in pcs_parse_one_pinctrl_entry()
1189 res = pcs_add_pingroup(pcs, np, np->name, pins, found); in pcs_parse_one_pinctrl_entry()
1198 res = pcs_parse_pinconf(pcs, np, function, map); in pcs_parse_one_pinctrl_entry()
1208 pcs_free_pingroups(pcs); in pcs_parse_one_pinctrl_entry()
1211 pcs_remove_function(pcs, function); in pcs_parse_one_pinctrl_entry()
1214 devm_kfree(pcs->dev, pins); in pcs_parse_one_pinctrl_entry()
1217 devm_kfree(pcs->dev, vals); in pcs_parse_one_pinctrl_entry()
1224 static int pcs_parse_bits_in_pinctrl_entry(struct pcs_device *pcs, in pcs_parse_bits_in_pinctrl_entry() argument
1239 dev_err(pcs->dev, "no valid property for %s\n", np->name); in pcs_parse_bits_in_pinctrl_entry()
1244 dev_err(pcs->dev, "bad data for %s\n", np->name); in pcs_parse_bits_in_pinctrl_entry()
1252 npins_in_row = pcs->width / pcs->bits_per_pin; in pcs_parse_bits_in_pinctrl_entry()
1254 vals = devm_kzalloc(pcs->dev, sizeof(*vals) * rows * npins_in_row, in pcs_parse_bits_in_pinctrl_entry()
1259 pins = devm_kzalloc(pcs->dev, sizeof(*pins) * rows * npins_in_row, in pcs_parse_bits_in_pinctrl_entry()
1277 pin_num_from_lsb = bit_pos / pcs->bits_per_pin; in pcs_parse_bits_in_pinctrl_entry()
1278 mask_pos = ((pcs->fmask) << bit_pos); in pcs_parse_bits_in_pinctrl_entry()
1283 dev_err(pcs->dev, in pcs_parse_bits_in_pinctrl_entry()
1292 dev_warn(pcs->dev, in pcs_parse_bits_in_pinctrl_entry()
1299 vals[found].reg = pcs->base + offset; in pcs_parse_bits_in_pinctrl_entry()
1302 pin = pcs_get_pin_by_offset(pcs, offset); in pcs_parse_bits_in_pinctrl_entry()
1304 dev_err(pcs->dev, in pcs_parse_bits_in_pinctrl_entry()
1314 function = pcs_add_function(pcs, np, np->name, vals, found, pgnames, 1); in pcs_parse_bits_in_pinctrl_entry()
1318 res = pcs_add_pingroup(pcs, np, np->name, pins, found); in pcs_parse_bits_in_pinctrl_entry()
1327 dev_err(pcs->dev, "pinconf not supported\n"); in pcs_parse_bits_in_pinctrl_entry()
1335 pcs_free_pingroups(pcs); in pcs_parse_bits_in_pinctrl_entry()
1338 pcs_remove_function(pcs, function); in pcs_parse_bits_in_pinctrl_entry()
1341 devm_kfree(pcs->dev, pins); in pcs_parse_bits_in_pinctrl_entry()
1344 devm_kfree(pcs->dev, vals); in pcs_parse_bits_in_pinctrl_entry()
1359 struct pcs_device *pcs; in pcs_dt_node_to_map() local
1363 pcs = pinctrl_dev_get_drvdata(pctldev); in pcs_dt_node_to_map()
1366 *map = devm_kzalloc(pcs->dev, sizeof(**map) * 2, GFP_KERNEL); in pcs_dt_node_to_map()
1372 pgnames = devm_kzalloc(pcs->dev, sizeof(*pgnames), GFP_KERNEL); in pcs_dt_node_to_map()
1378 if (pcs->bits_per_mux) { in pcs_dt_node_to_map()
1379 ret = pcs_parse_bits_in_pinctrl_entry(pcs, np_config, map, in pcs_dt_node_to_map()
1382 dev_err(pcs->dev, "no pins entries for %s\n", in pcs_dt_node_to_map()
1387 ret = pcs_parse_one_pinctrl_entry(pcs, np_config, map, in pcs_dt_node_to_map()
1390 dev_err(pcs->dev, "no pins entries for %s\n", in pcs_dt_node_to_map()
1399 devm_kfree(pcs->dev, pgnames); in pcs_dt_node_to_map()
1401 devm_kfree(pcs->dev, *map); in pcs_dt_node_to_map()
1410 static void pcs_free_funcs(struct pcs_device *pcs) in pcs_free_funcs() argument
1415 mutex_lock(&pcs->mutex); in pcs_free_funcs()
1416 for (i = 0; i < pcs->nfuncs; i++) { in pcs_free_funcs()
1419 func = radix_tree_lookup(&pcs->ftree, i); in pcs_free_funcs()
1422 radix_tree_delete(&pcs->ftree, i); in pcs_free_funcs()
1424 list_for_each_safe(pos, tmp, &pcs->functions) { in pcs_free_funcs()
1430 mutex_unlock(&pcs->mutex); in pcs_free_funcs()
1437 static void pcs_free_pingroups(struct pcs_device *pcs) in pcs_free_pingroups() argument
1442 mutex_lock(&pcs->mutex); in pcs_free_pingroups()
1443 for (i = 0; i < pcs->ngroups; i++) { in pcs_free_pingroups()
1446 pingroup = radix_tree_lookup(&pcs->pgtree, i); in pcs_free_pingroups()
1449 radix_tree_delete(&pcs->pgtree, i); in pcs_free_pingroups()
1451 list_for_each_safe(pos, tmp, &pcs->pingroups) { in pcs_free_pingroups()
1457 mutex_unlock(&pcs->mutex); in pcs_free_pingroups()
1464 static void pcs_irq_free(struct pcs_device *pcs) in pcs_irq_free() argument
1466 struct pcs_soc_data *pcs_soc = &pcs->socdata; in pcs_irq_free()
1471 if (pcs->domain) in pcs_irq_free()
1472 irq_domain_remove(pcs->domain); in pcs_irq_free()
1484 static void pcs_free_resources(struct pcs_device *pcs) in pcs_free_resources() argument
1486 pcs_irq_free(pcs); in pcs_free_resources()
1488 if (pcs->pctl) in pcs_free_resources()
1489 pinctrl_unregister(pcs->pctl); in pcs_free_resources()
1491 pcs_free_funcs(pcs); in pcs_free_resources()
1492 pcs_free_pingroups(pcs); in pcs_free_resources()
1499 dev_err(pcs->dev, err); \
1506 static int pcs_add_gpio_func(struct device_node *node, struct pcs_device *pcs) in pcs_add_gpio_func() argument
1522 range = devm_kzalloc(pcs->dev, sizeof(*range), GFP_KERNEL); in pcs_add_gpio_func()
1530 mutex_lock(&pcs->mutex); in pcs_add_gpio_func()
1531 list_add_tail(&range->node, &pcs->gpiofuncs); in pcs_add_gpio_func()
1532 mutex_unlock(&pcs->mutex); in pcs_add_gpio_func()
1558 struct pcs_device *pcs; in pcs_irq_set() local
1562 pcs = container_of(pcs_soc, struct pcs_device, socdata); in pcs_irq_set()
1563 list_for_each(pos, &pcs->irqs) { in pcs_irq_set()
1572 raw_spin_lock(&pcs->lock); in pcs_irq_set()
1573 mask = pcs->read(pcswi->reg); in pcs_irq_set()
1578 pcs->write(mask, pcswi->reg); in pcs_irq_set()
1579 raw_spin_unlock(&pcs->lock); in pcs_irq_set()
1636 struct pcs_device *pcs; in pcs_irq_handle() local
1640 pcs = container_of(pcs_soc, struct pcs_device, socdata); in pcs_irq_handle()
1641 list_for_each(pos, &pcs->irqs) { in pcs_irq_handle()
1646 raw_spin_lock(&pcs->lock); in pcs_irq_handle()
1647 mask = pcs->read(pcswi->reg); in pcs_irq_handle()
1648 raw_spin_unlock(&pcs->lock); in pcs_irq_handle()
1650 generic_handle_irq(irq_find_mapping(pcs->domain, in pcs_irq_handle()
1700 struct pcs_device *pcs; in pcs_irqdomain_map() local
1703 pcs = container_of(pcs_soc, struct pcs_device, socdata); in pcs_irqdomain_map()
1704 pcswi = devm_kzalloc(pcs->dev, sizeof(*pcswi), GFP_KERNEL); in pcs_irqdomain_map()
1708 pcswi->reg = pcs->base + hwirq; in pcs_irqdomain_map()
1712 mutex_lock(&pcs->mutex); in pcs_irqdomain_map()
1713 list_add_tail(&pcswi->node, &pcs->irqs); in pcs_irqdomain_map()
1714 mutex_unlock(&pcs->mutex); in pcs_irqdomain_map()
1717 irq_set_chip_and_handler(irq, &pcs->chip, in pcs_irqdomain_map()
1734 static int pcs_irq_init_chained_handler(struct pcs_device *pcs, in pcs_irq_init_chained_handler() argument
1737 struct pcs_soc_data *pcs_soc = &pcs->socdata; in pcs_irq_init_chained_handler()
1747 INIT_LIST_HEAD(&pcs->irqs); in pcs_irq_init_chained_handler()
1748 pcs->chip.name = name; in pcs_irq_init_chained_handler()
1749 pcs->chip.irq_ack = pcs_irq_mask; in pcs_irq_init_chained_handler()
1750 pcs->chip.irq_mask = pcs_irq_mask; in pcs_irq_init_chained_handler()
1751 pcs->chip.irq_unmask = pcs_irq_unmask; in pcs_irq_init_chained_handler()
1752 pcs->chip.irq_set_wake = pcs_irq_set_wake; in pcs_irq_init_chained_handler()
1777 num_irqs = pcs->size; in pcs_irq_init_chained_handler()
1779 pcs->domain = irq_domain_add_simple(np, num_irqs, 0, in pcs_irq_init_chained_handler()
1782 if (!pcs->domain) { in pcs_irq_init_chained_handler()
1794 struct pcs_device *pcs; in pinctrl_single_suspend() local
1796 pcs = platform_get_drvdata(pdev); in pinctrl_single_suspend()
1797 if (!pcs) in pinctrl_single_suspend()
1800 return pinctrl_force_sleep(pcs->pctl); in pinctrl_single_suspend()
1805 struct pcs_device *pcs; in pinctrl_single_resume() local
1807 pcs = platform_get_drvdata(pdev); in pinctrl_single_resume()
1808 if (!pcs) in pinctrl_single_resume()
1811 return pinctrl_force_default(pcs->pctl); in pinctrl_single_resume()
1821 struct pcs_device *pcs; in pcs_probe() local
1829 pcs = devm_kzalloc(&pdev->dev, sizeof(*pcs), GFP_KERNEL); in pcs_probe()
1830 if (!pcs) { in pcs_probe()
1834 pcs->dev = &pdev->dev; in pcs_probe()
1835 raw_spin_lock_init(&pcs->lock); in pcs_probe()
1836 mutex_init(&pcs->mutex); in pcs_probe()
1837 INIT_LIST_HEAD(&pcs->pingroups); in pcs_probe()
1838 INIT_LIST_HEAD(&pcs->functions); in pcs_probe()
1839 INIT_LIST_HEAD(&pcs->gpiofuncs); in pcs_probe()
1841 pcs->flags = soc->flags; in pcs_probe()
1842 memcpy(&pcs->socdata, soc, sizeof(*soc)); in pcs_probe()
1844 PCS_GET_PROP_U32("pinctrl-single,register-width", &pcs->width, in pcs_probe()
1848 &pcs->fmask); in pcs_probe()
1850 pcs->fshift = __ffs(pcs->fmask); in pcs_probe()
1851 pcs->fmax = pcs->fmask >> pcs->fshift; in pcs_probe()
1854 pcs->fmask = 0; in pcs_probe()
1855 pcs->fshift = 0; in pcs_probe()
1856 pcs->fmax = 0; in pcs_probe()
1860 &pcs->foff); in pcs_probe()
1862 pcs->foff = PCS_OFF_DISABLED; in pcs_probe()
1864 pcs->bits_per_mux = of_property_read_bool(np, in pcs_probe()
1869 dev_err(pcs->dev, "could not get resource\n"); in pcs_probe()
1873 pcs->res = devm_request_mem_region(pcs->dev, res->start, in pcs_probe()
1875 if (!pcs->res) { in pcs_probe()
1876 dev_err(pcs->dev, "could not get mem_region\n"); in pcs_probe()
1880 pcs->size = resource_size(pcs->res); in pcs_probe()
1881 pcs->base = devm_ioremap(pcs->dev, pcs->res->start, pcs->size); in pcs_probe()
1882 if (!pcs->base) { in pcs_probe()
1883 dev_err(pcs->dev, "could not ioremap\n"); in pcs_probe()
1887 INIT_RADIX_TREE(&pcs->pgtree, GFP_KERNEL); in pcs_probe()
1888 INIT_RADIX_TREE(&pcs->ftree, GFP_KERNEL); in pcs_probe()
1889 platform_set_drvdata(pdev, pcs); in pcs_probe()
1891 switch (pcs->width) { in pcs_probe()
1893 pcs->read = pcs_readb; in pcs_probe()
1894 pcs->write = pcs_writeb; in pcs_probe()
1897 pcs->read = pcs_readw; in pcs_probe()
1898 pcs->write = pcs_writew; in pcs_probe()
1901 pcs->read = pcs_readl; in pcs_probe()
1902 pcs->write = pcs_writel; in pcs_probe()
1908 pcs->desc.name = DRIVER_NAME; in pcs_probe()
1909 pcs->desc.pctlops = &pcs_pinctrl_ops; in pcs_probe()
1910 pcs->desc.pmxops = &pcs_pinmux_ops; in pcs_probe()
1912 pcs->desc.confops = &pcs_pinconf_ops; in pcs_probe()
1913 pcs->desc.owner = THIS_MODULE; in pcs_probe()
1915 ret = pcs_allocate_pin_table(pcs); in pcs_probe()
1919 pcs->pctl = pinctrl_register(&pcs->desc, pcs->dev, pcs); in pcs_probe()
1920 if (IS_ERR(pcs->pctl)) { in pcs_probe()
1921 dev_err(pcs->dev, "could not register single pinctrl driver\n"); in pcs_probe()
1922 ret = PTR_ERR(pcs->pctl); in pcs_probe()
1926 ret = pcs_add_gpio_func(np, pcs); in pcs_probe()
1930 pcs->socdata.irq = irq_of_parse_and_map(np, 0); in pcs_probe()
1931 if (pcs->socdata.irq) in pcs_probe()
1932 pcs->flags |= PCS_FEAT_IRQ; in pcs_probe()
1938 pcs->socdata.rearm = pdata->rearm; in pcs_probe()
1940 pcs->socdata.irq = pdata->irq; in pcs_probe()
1941 pcs->flags |= PCS_FEAT_IRQ; in pcs_probe()
1946 ret = pcs_irq_init_chained_handler(pcs, np); in pcs_probe()
1948 dev_warn(pcs->dev, "initialized with no interrupts\n"); in pcs_probe()
1951 dev_info(pcs->dev, "%i pins at pa %p size %u\n", in pcs_probe()
1952 pcs->desc.npins, pcs->base, pcs->size); in pcs_probe()
1957 pcs_free_resources(pcs); in pcs_probe()
1964 struct pcs_device *pcs = platform_get_drvdata(pdev); in pcs_remove() local
1966 if (!pcs) in pcs_remove()
1969 pcs_free_resources(pcs); in pcs_remove()