Lines Matching refs:ipd
49 struct ioc3_priv_data *ipd = irq_data_get_irq_chip_data(d);
52 writel(BIT(hwirq), &ipd->regs->sio_ir);
57 struct ioc3_priv_data *ipd = irq_data_get_irq_chip_data(d);
60 writel(BIT(hwirq), &ipd->regs->sio_iec);
65 struct ioc3_priv_data *ipd = irq_data_get_irq_chip_data(d);
68 writel(BIT(hwirq), &ipd->regs->sio_ies);
105 struct ioc3_priv_data *ipd = domain->host_data;
106 struct ioc3 __iomem *regs = ipd->regs;
132 static int ioc3_irq_domain_setup(struct ioc3_priv_data *ipd, int irq)
141 domain = irq_domain_create_linear(fn, 24, &ioc3_irq_domain_ops, ipd);
147 ipd->domain = domain;
150 ipd->domain_irq = irq;
154 dev_err(&ipd->pdev->dev, "irq domain setup failed\n");
183 static int ioc3_serial_setup(struct ioc3_priv_data *ipd)
189 &ipd->regs->gpcr_s);
191 writel(0, &ipd->regs->gppr[6]);
193 writel(0, &ipd->regs->gppr[7]);
196 writel(readl(&ipd->regs->port_a.sscr) & ~SSCR_DMA_EN,
197 &ipd->regs->port_a.sscr);
198 writel(readl(&ipd->regs->port_b.sscr) & ~SSCR_DMA_EN,
199 &ipd->regs->port_b.sscr);
202 ret = mfd_add_devices(&ipd->pdev->dev, PLATFORM_DEVID_AUTO,
204 &ipd->pdev->resource[0], 0, ipd->domain);
206 dev_err(&ipd->pdev->dev, "Failed to add 16550 subdevs\n");
227 static int ioc3_kbd_setup(struct ioc3_priv_data *ipd)
231 ret = mfd_add_devices(&ipd->pdev->dev, PLATFORM_DEVID_AUTO,
233 &ipd->pdev->resource[0], 0, ipd->domain);
235 dev_err(&ipd->pdev->dev, "Failed to add 16550 subdevs\n");
271 static int ioc3_eth_setup(struct ioc3_priv_data *ipd)
276 writel(GPCR_MLAN_EN, &ipd->regs->gpcr_s);
281 ipd->pdev->resource->start);
283 ret = mfd_add_devices(&ipd->pdev->dev, PLATFORM_DEVID_AUTO,
285 &ipd->pdev->resource[0], ipd->pdev->irq, NULL);
287 dev_err(&ipd->pdev->dev, "Failed to add ETH/W1 subdev\n");
306 static int ioc3_m48t35_setup(struct ioc3_priv_data *ipd)
310 ret = mfd_add_devices(&ipd->pdev->dev, PLATFORM_DEVID_AUTO,
312 &ipd->pdev->resource[0], 0, ipd->domain);
314 dev_err(&ipd->pdev->dev, "Failed to add M48T35 subdev\n");
343 static int ioc3_ds1685_setup(struct ioc3_priv_data *ipd)
347 irq = ioc3_map_irq(ipd->pdev, 6, 0);
349 ret = mfd_add_devices(&ipd->pdev->dev, 0, ioc3_ds1685_cells,
351 &ipd->pdev->resource[0], irq, NULL);
353 dev_err(&ipd->pdev->dev, "Failed to add DS1685 subdev\n");
375 static int ioc3_led_setup(struct ioc3_priv_data *ipd)
379 ret = mfd_add_devices(&ipd->pdev->dev, 0, ioc3_led_cells,
381 &ipd->pdev->resource[0], 0, ipd->domain);
383 dev_err(&ipd->pdev->dev, "Failed to add LED subdev\n");
388 static int ip27_baseio_setup(struct ioc3_priv_data *ipd)
392 io_irq = ioc3_map_irq(ipd->pdev, PCI_SLOT(ipd->pdev->devfn),
394 ret = ioc3_irq_domain_setup(ipd, io_irq);
398 ret = ioc3_eth_setup(ipd);
402 ret = ioc3_serial_setup(ipd);
406 return ioc3_m48t35_setup(ipd);
409 static int ip27_baseio6g_setup(struct ioc3_priv_data *ipd)
413 io_irq = ioc3_map_irq(ipd->pdev, PCI_SLOT(ipd->pdev->devfn),
415 ret = ioc3_irq_domain_setup(ipd, io_irq);
419 ret = ioc3_eth_setup(ipd);
423 ret = ioc3_serial_setup(ipd);
427 ret = ioc3_m48t35_setup(ipd);
431 return ioc3_kbd_setup(ipd);
434 static int ip27_mio_setup(struct ioc3_priv_data *ipd)
438 ret = ioc3_irq_domain_setup(ipd, ipd->pdev->irq);
442 ret = ioc3_serial_setup(ipd);
446 return ioc3_kbd_setup(ipd);
449 static int ip30_sysboard_setup(struct ioc3_priv_data *ipd)
453 io_irq = ioc3_map_irq(ipd->pdev, PCI_SLOT(ipd->pdev->devfn),
455 ret = ioc3_irq_domain_setup(ipd, io_irq);
459 ret = ioc3_eth_setup(ipd);
463 ret = ioc3_serial_setup(ipd);
467 ret = ioc3_kbd_setup(ipd);
471 ret = ioc3_ds1685_setup(ipd);
475 return ioc3_led_setup(ipd);
478 static int ioc3_menet_setup(struct ioc3_priv_data *ipd)
482 io_irq = ioc3_map_irq(ipd->pdev, PCI_SLOT(ipd->pdev->devfn),
484 ret = ioc3_irq_domain_setup(ipd, io_irq);
488 ret = ioc3_eth_setup(ipd);
492 return ioc3_serial_setup(ipd);
495 static int ioc3_menet4_setup(struct ioc3_priv_data *ipd)
497 return ioc3_eth_setup(ipd);
500 static int ioc3_cad_duo_setup(struct ioc3_priv_data *ipd)
504 io_irq = ioc3_map_irq(ipd->pdev, PCI_SLOT(ipd->pdev->devfn),
506 ret = ioc3_irq_domain_setup(ipd, io_irq);
510 ret = ioc3_eth_setup(ipd);
514 return ioc3_kbd_setup(ipd);
528 int (*setup)(struct ioc3_priv_data *ipd);
540 static int ioc3_setup(struct ioc3_priv_data *ipd)
546 writel(~0, &ipd->regs->sio_iec);
547 writel(~0, &ipd->regs->sio_ir);
548 writel(0, &ipd->regs->eth.eier);
549 writel(~0, &ipd->regs->eth.eisr);
552 pci_read_config_dword(ipd->pdev, PCI_SUBSYSTEM_VENDOR_ID, &sid);
557 return ioc3_infos[i].setup(ipd);
562 return ioc3_cad_duo_setup(ipd);
568 struct ioc3_priv_data *ipd;
587 ipd = devm_kzalloc(&pdev->dev, sizeof(struct ioc3_priv_data),
589 if (!ipd) {
593 ipd->pdev = pdev;
606 ipd->regs = regs;
609 pci_set_drvdata(pdev, ipd);
611 ret = ioc3_setup(ipd);
614 mfd_remove_devices(&ipd->pdev->dev);
615 if (ipd->domain) {
616 struct fwnode_handle *fn = ipd->domain->fwnode;
618 irq_domain_remove(ipd->domain);
620 free_irq(ipd->domain_irq, (void *)ipd);
635 struct ioc3_priv_data *ipd;
637 ipd = pci_get_drvdata(pdev);
640 writel(~0, &ipd->regs->sio_iec);
641 writel(~0, &ipd->regs->sio_ir);
644 mfd_remove_devices(&ipd->pdev->dev);
645 if (ipd->domain) {
646 struct fwnode_handle *fn = ipd->domain->fwnode;
648 irq_domain_remove(ipd->domain);
650 free_irq(ipd->domain_irq, (void *)ipd);
652 pci_iounmap(pdev, ipd->regs);