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