Lines Matching refs:ipd

48 	struct ioc3_priv_data *ipd = irq_data_get_irq_chip_data(d);  in ioc3_irq_ack()  local
51 writel(BIT(hwirq), &ipd->regs->sio_ir); in ioc3_irq_ack()
56 struct ioc3_priv_data *ipd = irq_data_get_irq_chip_data(d); in ioc3_irq_mask() local
59 writel(BIT(hwirq), &ipd->regs->sio_iec); in ioc3_irq_mask()
64 struct ioc3_priv_data *ipd = irq_data_get_irq_chip_data(d); in ioc3_irq_unmask() local
67 writel(BIT(hwirq), &ipd->regs->sio_ies); in ioc3_irq_unmask()
104 struct ioc3_priv_data *ipd = domain->host_data; in ioc3_irq_handler() local
105 struct ioc3 __iomem *regs = ipd->regs; in ioc3_irq_handler()
135 static int ioc3_irq_domain_setup(struct ioc3_priv_data *ipd, int irq) in ioc3_irq_domain_setup() argument
144 domain = irq_domain_create_linear(fn, 24, &ioc3_irq_domain_ops, ipd); in ioc3_irq_domain_setup()
150 ipd->domain = domain; in ioc3_irq_domain_setup()
153 ipd->domain_irq = irq; in ioc3_irq_domain_setup()
157 dev_err(&ipd->pdev->dev, "irq domain setup failed\n"); in ioc3_irq_domain_setup()
186 static int ioc3_serial_setup(struct ioc3_priv_data *ipd) in ioc3_serial_setup() argument
192 &ipd->regs->gpcr_s); in ioc3_serial_setup()
194 writel(0, &ipd->regs->gppr[6]); in ioc3_serial_setup()
196 writel(0, &ipd->regs->gppr[7]); in ioc3_serial_setup()
199 writel(readl(&ipd->regs->port_a.sscr) & ~SSCR_DMA_EN, in ioc3_serial_setup()
200 &ipd->regs->port_a.sscr); in ioc3_serial_setup()
201 writel(readl(&ipd->regs->port_b.sscr) & ~SSCR_DMA_EN, in ioc3_serial_setup()
202 &ipd->regs->port_b.sscr); in ioc3_serial_setup()
205 ret = mfd_add_devices(&ipd->pdev->dev, PLATFORM_DEVID_AUTO, in ioc3_serial_setup()
207 &ipd->pdev->resource[0], 0, ipd->domain); in ioc3_serial_setup()
209 dev_err(&ipd->pdev->dev, "Failed to add 16550 subdevs\n"); in ioc3_serial_setup()
230 static int ioc3_kbd_setup(struct ioc3_priv_data *ipd) in ioc3_kbd_setup() argument
234 ret = mfd_add_devices(&ipd->pdev->dev, PLATFORM_DEVID_AUTO, in ioc3_kbd_setup()
236 &ipd->pdev->resource[0], 0, ipd->domain); in ioc3_kbd_setup()
238 dev_err(&ipd->pdev->dev, "Failed to add 16550 subdevs\n"); in ioc3_kbd_setup()
274 static int ioc3_eth_setup(struct ioc3_priv_data *ipd) in ioc3_eth_setup() argument
279 writel(GPCR_MLAN_EN, &ipd->regs->gpcr_s); in ioc3_eth_setup()
284 ipd->pdev->resource->start); in ioc3_eth_setup()
286 ret = mfd_add_devices(&ipd->pdev->dev, PLATFORM_DEVID_AUTO, in ioc3_eth_setup()
288 &ipd->pdev->resource[0], ipd->pdev->irq, NULL); in ioc3_eth_setup()
290 dev_err(&ipd->pdev->dev, "Failed to add ETH/W1 subdev\n"); in ioc3_eth_setup()
309 static int ioc3_m48t35_setup(struct ioc3_priv_data *ipd) in ioc3_m48t35_setup() argument
313 ret = mfd_add_devices(&ipd->pdev->dev, PLATFORM_DEVID_AUTO, in ioc3_m48t35_setup()
315 &ipd->pdev->resource[0], 0, ipd->domain); in ioc3_m48t35_setup()
317 dev_err(&ipd->pdev->dev, "Failed to add M48T35 subdev\n"); in ioc3_m48t35_setup()
346 static int ioc3_ds1685_setup(struct ioc3_priv_data *ipd) in ioc3_ds1685_setup() argument
350 irq = ioc3_map_irq(ipd->pdev, 6, 0); in ioc3_ds1685_setup()
352 ret = mfd_add_devices(&ipd->pdev->dev, 0, ioc3_ds1685_cells, in ioc3_ds1685_setup()
354 &ipd->pdev->resource[0], irq, NULL); in ioc3_ds1685_setup()
356 dev_err(&ipd->pdev->dev, "Failed to add DS1685 subdev\n"); in ioc3_ds1685_setup()
378 static int ioc3_led_setup(struct ioc3_priv_data *ipd) in ioc3_led_setup() argument
382 ret = mfd_add_devices(&ipd->pdev->dev, 0, ioc3_led_cells, in ioc3_led_setup()
384 &ipd->pdev->resource[0], 0, ipd->domain); in ioc3_led_setup()
386 dev_err(&ipd->pdev->dev, "Failed to add LED subdev\n"); in ioc3_led_setup()
391 static int ip27_baseio_setup(struct ioc3_priv_data *ipd) in ip27_baseio_setup() argument
395 io_irq = ioc3_map_irq(ipd->pdev, PCI_SLOT(ipd->pdev->devfn), in ip27_baseio_setup()
397 ret = ioc3_irq_domain_setup(ipd, io_irq); in ip27_baseio_setup()
401 ret = ioc3_eth_setup(ipd); in ip27_baseio_setup()
405 ret = ioc3_serial_setup(ipd); in ip27_baseio_setup()
409 return ioc3_m48t35_setup(ipd); in ip27_baseio_setup()
412 static int ip27_baseio6g_setup(struct ioc3_priv_data *ipd) in ip27_baseio6g_setup() argument
416 io_irq = ioc3_map_irq(ipd->pdev, PCI_SLOT(ipd->pdev->devfn), in ip27_baseio6g_setup()
418 ret = ioc3_irq_domain_setup(ipd, io_irq); in ip27_baseio6g_setup()
422 ret = ioc3_eth_setup(ipd); in ip27_baseio6g_setup()
426 ret = ioc3_serial_setup(ipd); in ip27_baseio6g_setup()
430 ret = ioc3_m48t35_setup(ipd); in ip27_baseio6g_setup()
434 return ioc3_kbd_setup(ipd); in ip27_baseio6g_setup()
437 static int ip27_mio_setup(struct ioc3_priv_data *ipd) in ip27_mio_setup() argument
441 ret = ioc3_irq_domain_setup(ipd, ipd->pdev->irq); in ip27_mio_setup()
445 ret = ioc3_serial_setup(ipd); in ip27_mio_setup()
449 return ioc3_kbd_setup(ipd); in ip27_mio_setup()
452 static int ip30_sysboard_setup(struct ioc3_priv_data *ipd) in ip30_sysboard_setup() argument
456 io_irq = ioc3_map_irq(ipd->pdev, PCI_SLOT(ipd->pdev->devfn), in ip30_sysboard_setup()
458 ret = ioc3_irq_domain_setup(ipd, io_irq); in ip30_sysboard_setup()
462 ret = ioc3_eth_setup(ipd); in ip30_sysboard_setup()
466 ret = ioc3_serial_setup(ipd); in ip30_sysboard_setup()
470 ret = ioc3_kbd_setup(ipd); in ip30_sysboard_setup()
474 ret = ioc3_ds1685_setup(ipd); in ip30_sysboard_setup()
478 return ioc3_led_setup(ipd); in ip30_sysboard_setup()
481 static int ioc3_menet_setup(struct ioc3_priv_data *ipd) in ioc3_menet_setup() argument
485 io_irq = ioc3_map_irq(ipd->pdev, PCI_SLOT(ipd->pdev->devfn), in ioc3_menet_setup()
487 ret = ioc3_irq_domain_setup(ipd, io_irq); in ioc3_menet_setup()
491 ret = ioc3_eth_setup(ipd); in ioc3_menet_setup()
495 return ioc3_serial_setup(ipd); in ioc3_menet_setup()
498 static int ioc3_menet4_setup(struct ioc3_priv_data *ipd) in ioc3_menet4_setup() argument
500 return ioc3_eth_setup(ipd); in ioc3_menet4_setup()
503 static int ioc3_cad_duo_setup(struct ioc3_priv_data *ipd) in ioc3_cad_duo_setup() argument
507 io_irq = ioc3_map_irq(ipd->pdev, PCI_SLOT(ipd->pdev->devfn), in ioc3_cad_duo_setup()
509 ret = ioc3_irq_domain_setup(ipd, io_irq); in ioc3_cad_duo_setup()
513 ret = ioc3_eth_setup(ipd); in ioc3_cad_duo_setup()
517 return ioc3_kbd_setup(ipd); in ioc3_cad_duo_setup()
531 int (*setup)(struct ioc3_priv_data *ipd);
543 static int ioc3_setup(struct ioc3_priv_data *ipd) in ioc3_setup() argument
549 writel(~0, &ipd->regs->sio_iec); in ioc3_setup()
550 writel(~0, &ipd->regs->sio_ir); in ioc3_setup()
551 writel(0, &ipd->regs->eth.eier); in ioc3_setup()
552 writel(~0, &ipd->regs->eth.eisr); in ioc3_setup()
555 pci_read_config_dword(ipd->pdev, PCI_SUBSYSTEM_VENDOR_ID, &sid); in ioc3_setup()
560 return ioc3_infos[i].setup(ipd); in ioc3_setup()
565 return ioc3_cad_duo_setup(ipd); in ioc3_setup()
571 struct ioc3_priv_data *ipd; in ioc3_mfd_probe() local
590 ipd = devm_kzalloc(&pdev->dev, sizeof(struct ioc3_priv_data), in ioc3_mfd_probe()
592 if (!ipd) { in ioc3_mfd_probe()
596 ipd->pdev = pdev; in ioc3_mfd_probe()
609 ipd->regs = regs; in ioc3_mfd_probe()
612 pci_set_drvdata(pdev, ipd); in ioc3_mfd_probe()
614 ret = ioc3_setup(ipd); in ioc3_mfd_probe()
617 mfd_remove_devices(&ipd->pdev->dev); in ioc3_mfd_probe()
618 if (ipd->domain) { in ioc3_mfd_probe()
619 struct fwnode_handle *fn = ipd->domain->fwnode; in ioc3_mfd_probe()
621 irq_domain_remove(ipd->domain); in ioc3_mfd_probe()
623 free_irq(ipd->domain_irq, (void *)ipd); in ioc3_mfd_probe()
638 struct ioc3_priv_data *ipd; in ioc3_mfd_remove() local
640 ipd = pci_get_drvdata(pdev); in ioc3_mfd_remove()
643 writel(~0, &ipd->regs->sio_iec); in ioc3_mfd_remove()
644 writel(~0, &ipd->regs->sio_ir); in ioc3_mfd_remove()
647 mfd_remove_devices(&ipd->pdev->dev); in ioc3_mfd_remove()
648 if (ipd->domain) { in ioc3_mfd_remove()
649 struct fwnode_handle *fn = ipd->domain->fwnode; in ioc3_mfd_remove()
651 irq_domain_remove(ipd->domain); in ioc3_mfd_remove()
653 free_irq(ipd->domain_irq, (void *)ipd); in ioc3_mfd_remove()
655 pci_iounmap(pdev, ipd->regs); in ioc3_mfd_remove()