Lines Matching refs:pa
412 struct spmi_pmic_arb_dev *pa = irq_data_get_irq_chip_data(d); in qpnpint_spmi_write() local
416 if (pmic_arb_write_cmd(pa->spmic, SPMI_CMD_EXT_WRITEL, sid, in qpnpint_spmi_write()
418 dev_err_ratelimited(&pa->spmic->dev, in qpnpint_spmi_write()
425 struct spmi_pmic_arb_dev *pa = irq_data_get_irq_chip_data(d); in qpnpint_spmi_read() local
429 if (pmic_arb_read_cmd(pa->spmic, SPMI_CMD_EXT_READL, sid, in qpnpint_spmi_read()
431 dev_err_ratelimited(&pa->spmic->dev, in qpnpint_spmi_read()
436 static void periph_interrupt(struct spmi_pmic_arb_dev *pa, u8 apid) in periph_interrupt() argument
442 status = readl_relaxed(pa->intr + pa->ver_ops->irq_status(apid)); in periph_interrupt()
446 irq = irq_find_mapping(pa->domain, in periph_interrupt()
447 pa->apid_to_ppid[apid] << 16 in periph_interrupt()
456 struct spmi_pmic_arb_dev *pa = irq_get_handler_data(irq); in pmic_arb_chained_irq() local
458 void __iomem *intr = pa->intr; in pmic_arb_chained_irq()
459 int first = pa->min_apid >> 5; in pmic_arb_chained_irq()
460 int last = pa->max_apid >> 5; in pmic_arb_chained_irq()
468 pa->ver_ops->owner_acc_status(pa->ee, i)); in pmic_arb_chained_irq()
472 periph_interrupt(pa, id + i * 32); in pmic_arb_chained_irq()
481 struct spmi_pmic_arb_dev *pa = irq_data_get_irq_chip_data(d); in qpnpint_irq_ack() local
487 raw_spin_lock_irqsave(&pa->lock, flags); in qpnpint_irq_ack()
488 writel_relaxed(1 << irq, pa->intr + pa->ver_ops->irq_clear(apid)); in qpnpint_irq_ack()
489 raw_spin_unlock_irqrestore(&pa->lock, flags); in qpnpint_irq_ack()
497 struct spmi_pmic_arb_dev *pa = irq_data_get_irq_chip_data(d); in qpnpint_irq_mask() local
504 raw_spin_lock_irqsave(&pa->lock, flags); in qpnpint_irq_mask()
505 status = readl_relaxed(pa->intr + pa->ver_ops->acc_enable(apid)); in qpnpint_irq_mask()
508 writel_relaxed(status, pa->intr + in qpnpint_irq_mask()
509 pa->ver_ops->acc_enable(apid)); in qpnpint_irq_mask()
511 raw_spin_unlock_irqrestore(&pa->lock, flags); in qpnpint_irq_mask()
519 struct spmi_pmic_arb_dev *pa = irq_data_get_irq_chip_data(d); in qpnpint_irq_unmask() local
526 raw_spin_lock_irqsave(&pa->lock, flags); in qpnpint_irq_unmask()
527 status = readl_relaxed(pa->intr + pa->ver_ops->acc_enable(apid)); in qpnpint_irq_unmask()
530 pa->intr + pa->ver_ops->acc_enable(apid)); in qpnpint_irq_unmask()
532 raw_spin_unlock_irqrestore(&pa->lock, flags); in qpnpint_irq_unmask()
595 static int search_mapping_table(struct spmi_pmic_arb_dev *pa, in search_mapping_table() argument
600 u32 *mapping_table = pa->mapping_table; in search_mapping_table()
634 struct spmi_pmic_arb_dev *pa = d->host_data; in qpnpint_irq_domain_dt_translate() local
639 dev_dbg(&pa->spmic->dev, in qpnpint_irq_domain_dt_translate()
654 err = search_mapping_table(pa, &spec, &apid); in qpnpint_irq_domain_dt_translate()
658 pa->apid_to_ppid[apid] = spec.slave << 8 | spec.per; in qpnpint_irq_domain_dt_translate()
661 if (apid > pa->max_apid) in qpnpint_irq_domain_dt_translate()
662 pa->max_apid = apid; in qpnpint_irq_domain_dt_translate()
663 if (apid < pa->min_apid) in qpnpint_irq_domain_dt_translate()
664 pa->min_apid = apid; in qpnpint_irq_domain_dt_translate()
672 dev_dbg(&pa->spmic->dev, "out_hwirq = %lu\n", *out_hwirq); in qpnpint_irq_domain_dt_translate()
681 struct spmi_pmic_arb_dev *pa = d->host_data; in qpnpint_irq_domain_map() local
683 dev_dbg(&pa->spmic->dev, "virq = %u, hwirq = %lu\n", virq, hwirq); in qpnpint_irq_domain_map()
692 static u32 pmic_arb_offset_v1(struct spmi_pmic_arb_dev *pa, u8 sid, u16 addr) in pmic_arb_offset_v1() argument
694 return 0x800 + 0x80 * pa->channel; in pmic_arb_offset_v1()
698 static u32 pmic_arb_offset_v2(struct spmi_pmic_arb_dev *pa, u8 sid, u16 addr) in pmic_arb_offset_v2() argument
701 u8 chan = pa->ppid_to_chan[ppid]; in pmic_arb_offset_v2()
703 return 0x1000 * pa->ee + 0x8000 * chan; in pmic_arb_offset_v2()
783 struct spmi_pmic_arb_dev *pa; in spmi_pmic_arb_probe() local
791 ctrl = spmi_controller_alloc(&pdev->dev, sizeof(*pa)); in spmi_pmic_arb_probe()
795 pa = spmi_controller_get_drvdata(ctrl); in spmi_pmic_arb_probe()
796 pa->spmic = ctrl; in spmi_pmic_arb_probe()
812 pa->ver_ops = &pmic_arb_v1; in spmi_pmic_arb_probe()
813 pa->wr_base = core; in spmi_pmic_arb_probe()
814 pa->rd_base = core; in spmi_pmic_arb_probe()
820 pa->ver_ops = &pmic_arb_v2; in spmi_pmic_arb_probe()
824 pa->rd_base = devm_ioremap_resource(&ctrl->dev, res); in spmi_pmic_arb_probe()
825 if (IS_ERR(pa->rd_base)) { in spmi_pmic_arb_probe()
826 err = PTR_ERR(pa->rd_base); in spmi_pmic_arb_probe()
832 pa->wr_base = devm_ioremap_resource(&ctrl->dev, res); in spmi_pmic_arb_probe()
833 if (IS_ERR(pa->wr_base)) { in spmi_pmic_arb_probe()
834 err = PTR_ERR(pa->wr_base); in spmi_pmic_arb_probe()
838 pa->ppid_to_chan = devm_kzalloc(&ctrl->dev, in spmi_pmic_arb_probe()
840 if (!pa->ppid_to_chan) { in spmi_pmic_arb_probe()
854 pa->ppid_to_chan[ppid] = chan; in spmi_pmic_arb_probe()
859 pa->intr = devm_ioremap_resource(&ctrl->dev, res); in spmi_pmic_arb_probe()
860 if (IS_ERR(pa->intr)) { in spmi_pmic_arb_probe()
861 err = PTR_ERR(pa->intr); in spmi_pmic_arb_probe()
866 pa->cnfg = devm_ioremap_resource(&ctrl->dev, res); in spmi_pmic_arb_probe()
867 if (IS_ERR(pa->cnfg)) { in spmi_pmic_arb_probe()
868 err = PTR_ERR(pa->cnfg); in spmi_pmic_arb_probe()
872 pa->irq = platform_get_irq_byname(pdev, "periph_irq"); in spmi_pmic_arb_probe()
873 if (pa->irq < 0) { in spmi_pmic_arb_probe()
874 err = pa->irq; in spmi_pmic_arb_probe()
890 pa->channel = channel; in spmi_pmic_arb_probe()
904 pa->ee = ee; in spmi_pmic_arb_probe()
906 for (i = 0; i < ARRAY_SIZE(pa->mapping_table); ++i) in spmi_pmic_arb_probe()
907 pa->mapping_table[i] = readl_relaxed( in spmi_pmic_arb_probe()
908 pa->cnfg + SPMI_MAPPING_TABLE_REG(i)); in spmi_pmic_arb_probe()
912 pa->max_apid = 0; in spmi_pmic_arb_probe()
913 pa->min_apid = PMIC_ARB_MAX_PERIPHS - 1; in spmi_pmic_arb_probe()
916 raw_spin_lock_init(&pa->lock); in spmi_pmic_arb_probe()
923 pa->domain = irq_domain_add_tree(pdev->dev.of_node, in spmi_pmic_arb_probe()
924 &pmic_arb_irq_domain_ops, pa); in spmi_pmic_arb_probe()
925 if (!pa->domain) { in spmi_pmic_arb_probe()
931 irq_set_handler_data(pa->irq, pa); in spmi_pmic_arb_probe()
932 irq_set_chained_handler(pa->irq, pmic_arb_chained_irq); in spmi_pmic_arb_probe()
941 irq_set_chained_handler(pa->irq, NULL); in spmi_pmic_arb_probe()
942 irq_set_handler_data(pa->irq, NULL); in spmi_pmic_arb_probe()
943 irq_domain_remove(pa->domain); in spmi_pmic_arb_probe()
952 struct spmi_pmic_arb_dev *pa = spmi_controller_get_drvdata(ctrl); in spmi_pmic_arb_remove() local
954 irq_set_chained_handler(pa->irq, NULL); in spmi_pmic_arb_remove()
955 irq_set_handler_data(pa->irq, NULL); in spmi_pmic_arb_remove()
956 irq_domain_remove(pa->domain); in spmi_pmic_arb_remove()