Lines Matching full:bus

135  * struct spmi_pmic_arb_bus - SPMI PMIC Arbiter Bus object
137 * @pmic_arb: the SPMI PMIC Arbiter the bus belongs to.
141 * @spmic: spmi controller registered for this bus
144 * bus instance
146 * particular SPMI bus instance
155 * @id: unique ID of the bus
230 int (*init_apid)(struct spmi_pmic_arb_bus *bus, int index);
231 int (*ppid_to_apid)(struct spmi_pmic_arb_bus *bus, u16 ppid);
233 int (*offset)(struct spmi_pmic_arb_bus *bus, u8 sid, u16 addr,
238 void __iomem *(*owner_acc_status)(struct spmi_pmic_arb_bus *bus, u8 m,
240 void __iomem *(*acc_enable)(struct spmi_pmic_arb_bus *bus, u16 n);
241 void __iomem *(*irq_status)(struct spmi_pmic_arb_bus *bus, u16 n);
242 void __iomem *(*irq_clear)(struct spmi_pmic_arb_bus *bus, u16 n);
244 void __iomem *(*apid_owner)(struct spmi_pmic_arb_bus *bus, u16 n);
294 struct spmi_pmic_arb_bus *bus = spmi_controller_get_drvdata(ctrl); in pmic_arb_wait_for_done() local
295 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb; in pmic_arb_wait_for_done()
301 rc = pmic_arb->ver_ops->offset(bus, sid, addr, ch_type); in pmic_arb_wait_for_done()
337 __func__, bus->id, sid, addr, status); in pmic_arb_wait_for_done()
344 struct spmi_pmic_arb_bus *bus = spmi_controller_get_drvdata(ctrl); in pmic_arb_non_data_cmd_v1() local
345 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb; in pmic_arb_non_data_cmd_v1()
351 rc = pmic_arb->ver_ops->offset(bus, sid, 0, PMIC_ARB_CHANNEL_RW); in pmic_arb_non_data_cmd_v1()
358 raw_spin_lock_irqsave(&bus->lock, flags); in pmic_arb_non_data_cmd_v1()
362 raw_spin_unlock_irqrestore(&bus->lock, flags); in pmic_arb_non_data_cmd_v1()
387 static int pmic_arb_fmt_read_cmd(struct spmi_pmic_arb_bus *bus, u8 opc, u8 sid, in pmic_arb_fmt_read_cmd() argument
390 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb; in pmic_arb_fmt_read_cmd()
394 rc = pmic_arb->ver_ops->offset(bus, sid, addr, in pmic_arb_fmt_read_cmd()
401 dev_err(&bus->spmic->dev, "pmic-arb supports 1..%d bytes per trans, but:%zu requested\n", in pmic_arb_fmt_read_cmd()
425 struct spmi_pmic_arb_bus *bus = spmi_controller_get_drvdata(ctrl); in pmic_arb_read_cmd_unlocked() local
426 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb; in pmic_arb_read_cmd_unlocked()
448 struct spmi_pmic_arb_bus *bus = spmi_controller_get_drvdata(ctrl); in pmic_arb_read_cmd() local
453 rc = pmic_arb_fmt_read_cmd(bus, opc, sid, addr, len, &cmd, in pmic_arb_read_cmd()
458 raw_spin_lock_irqsave(&bus->lock, flags); in pmic_arb_read_cmd()
460 raw_spin_unlock_irqrestore(&bus->lock, flags); in pmic_arb_read_cmd()
465 static int pmic_arb_fmt_write_cmd(struct spmi_pmic_arb_bus *bus, u8 opc, in pmic_arb_fmt_write_cmd() argument
469 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb; in pmic_arb_fmt_write_cmd()
473 rc = pmic_arb->ver_ops->offset(bus, sid, addr, in pmic_arb_fmt_write_cmd()
480 dev_err(&bus->spmic->dev, "pmic-arb supports 1..%d bytes per trans, but:%zu requested\n", in pmic_arb_fmt_write_cmd()
506 struct spmi_pmic_arb_bus *bus = spmi_controller_get_drvdata(ctrl); in pmic_arb_write_cmd_unlocked() local
507 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb; in pmic_arb_write_cmd_unlocked()
526 struct spmi_pmic_arb_bus *bus = spmi_controller_get_drvdata(ctrl); in pmic_arb_write_cmd() local
531 rc = pmic_arb_fmt_write_cmd(bus, opc, sid, addr, len, &cmd, in pmic_arb_write_cmd()
536 raw_spin_lock_irqsave(&bus->lock, flags); in pmic_arb_write_cmd()
539 raw_spin_unlock_irqrestore(&bus->lock, flags); in pmic_arb_write_cmd()
547 struct spmi_pmic_arb_bus *bus = spmi_controller_get_drvdata(ctrl); in pmic_arb_masked_write() local
553 rc = pmic_arb_fmt_read_cmd(bus, SPMI_CMD_EXT_READL, sid, addr, len, in pmic_arb_masked_write()
558 rc = pmic_arb_fmt_write_cmd(bus, SPMI_CMD_EXT_WRITEL, sid, addr, in pmic_arb_masked_write()
563 raw_spin_lock_irqsave(&bus->lock, flags); in pmic_arb_masked_write()
575 raw_spin_unlock_irqrestore(&bus->lock, flags); in pmic_arb_masked_write()
601 struct spmi_pmic_arb_bus *bus = irq_data_get_irq_chip_data(d); in qpnpint_spmi_write() local
605 if (pmic_arb_write_cmd(bus->spmic, SPMI_CMD_EXT_WRITEL, sid, in qpnpint_spmi_write()
607 dev_err_ratelimited(&bus->spmic->dev, "failed irqchip transaction on %x\n", in qpnpint_spmi_write()
613 struct spmi_pmic_arb_bus *bus = irq_data_get_irq_chip_data(d); in qpnpint_spmi_read() local
617 if (pmic_arb_read_cmd(bus->spmic, SPMI_CMD_EXT_READL, sid, in qpnpint_spmi_read()
619 dev_err_ratelimited(&bus->spmic->dev, "failed irqchip transaction on %x\n", in qpnpint_spmi_read()
627 struct spmi_pmic_arb_bus *bus = irq_data_get_irq_chip_data(d); in qpnpint_spmi_masked_write() local
632 rc = pmic_arb_masked_write(bus->spmic, sid, (per << 8) + reg, buf, in qpnpint_spmi_masked_write()
635 dev_err_ratelimited(&bus->spmic->dev, "failed irqchip transaction on %x rc=%d\n", in qpnpint_spmi_masked_write()
640 static void cleanup_irq(struct spmi_pmic_arb_bus *bus, u16 apid, int id) in cleanup_irq() argument
642 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb; in cleanup_irq()
643 u16 ppid = bus->apid_data[apid].ppid; in cleanup_irq()
648 dev_err_ratelimited(&bus->spmic->dev, "%s apid=%d sid=0x%x per=0x%x irq=%d\n", in cleanup_irq()
650 writel_relaxed(irq_mask, pmic_arb->ver_ops->irq_clear(bus, apid)); in cleanup_irq()
653 static int periph_interrupt(struct spmi_pmic_arb_bus *bus, u16 apid) in periph_interrupt() argument
655 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb; in periph_interrupt()
659 u8 sid = (bus->apid_data[apid].ppid >> 8) & 0xF; in periph_interrupt()
660 u8 per = bus->apid_data[apid].ppid & 0xFF; in periph_interrupt()
662 status = readl_relaxed(pmic_arb->ver_ops->irq_status(bus, apid)); in periph_interrupt()
666 irq = irq_find_mapping(bus->domain, in periph_interrupt()
669 cleanup_irq(bus, apid, id); in periph_interrupt()
681 struct spmi_pmic_arb_bus *bus = irq_desc_get_handler_data(desc); in pmic_arb_chained_irq() local
682 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb; in pmic_arb_chained_irq()
685 int first = bus->min_apid; in pmic_arb_chained_irq()
686 int last = bus->max_apid; in pmic_arb_chained_irq()
688 * acc_offset will be non-zero for the secondary SPMI bus instance on in pmic_arb_chained_irq()
691 int acc_offset = bus->base_apid >> 5; in pmic_arb_chained_irq()
702 status = readl_relaxed(ver_ops->owner_acc_status(bus, ee, i - acc_offset)); in pmic_arb_chained_irq()
716 ver_ops->acc_enable(bus, apid)); in pmic_arb_chained_irq()
718 if (periph_interrupt(bus, apid) != 0) in pmic_arb_chained_irq()
727 if (bus->apid_data[i].irq_ee != pmic_arb->ee) in pmic_arb_chained_irq()
731 ver_ops->irq_status(bus, i)); in pmic_arb_chained_irq()
734 ver_ops->acc_enable(bus, i)); in pmic_arb_chained_irq()
736 dev_dbg(&bus->spmic->dev, in pmic_arb_chained_irq()
739 if (periph_interrupt(bus, i) != 0) in pmic_arb_chained_irq()
754 struct spmi_pmic_arb_bus *bus = irq_data_get_irq_chip_data(d); in qpnpint_irq_ack() local
755 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb; in qpnpint_irq_ack()
760 writel_relaxed(BIT(irq), pmic_arb->ver_ops->irq_clear(bus, apid)); in qpnpint_irq_ack()
776 struct spmi_pmic_arb_bus *bus = irq_data_get_irq_chip_data(d); in qpnpint_irq_unmask() local
777 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb; in qpnpint_irq_unmask()
784 ver_ops->acc_enable(bus, apid)); in qpnpint_irq_unmask()
841 struct spmi_pmic_arb_bus *bus = irq_data_get_irq_chip_data(d); in qpnpint_irq_set_wake() local
843 return irq_set_irq_wake(bus->irq, on); in qpnpint_irq_set_wake()
865 struct spmi_pmic_arb_bus *bus = irq_data_get_irq_chip_data(d); in qpnpint_irq_domain_activate() local
866 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb; in qpnpint_irq_domain_activate()
873 if (bus->apid_data[apid].irq_ee != pmic_arb->ee) { in qpnpint_irq_domain_activate()
874 …dev_err(&bus->spmic->dev, "failed to xlate sid = %#x, periph = %#x, irq = %u: ee=%u but owner=%u\n… in qpnpint_irq_domain_activate()
876 bus->apid_data[apid].irq_ee); in qpnpint_irq_domain_activate()
903 struct spmi_pmic_arb_bus *bus = d->host_data; in qpnpint_irq_domain_translate() local
904 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb; in qpnpint_irq_domain_translate()
909 dev_dbg(&bus->spmic->dev, "intspec[0] 0x%1x intspec[1] 0x%02x intspec[2] 0x%02x\n", in qpnpint_irq_domain_translate()
912 if (irq_domain_get_of_node(d) != bus->spmic->dev.of_node) in qpnpint_irq_domain_translate()
920 rc = pmic_arb->ver_ops->ppid_to_apid(bus, ppid); in qpnpint_irq_domain_translate()
922 dev_err(&bus->spmic->dev, "failed to xlate sid = %#x, periph = %#x, irq = %u rc = %d\n", in qpnpint_irq_domain_translate()
929 if (apid > bus->max_apid) in qpnpint_irq_domain_translate()
930 bus->max_apid = apid; in qpnpint_irq_domain_translate()
931 if (apid < bus->min_apid) in qpnpint_irq_domain_translate()
932 bus->min_apid = apid; in qpnpint_irq_domain_translate()
937 dev_dbg(&bus->spmic->dev, "out_hwirq = %lu\n", *out_hwirq); in qpnpint_irq_domain_translate()
944 static void qpnpint_irq_domain_map(struct spmi_pmic_arb_bus *bus, in qpnpint_irq_domain_map() argument
950 dev_dbg(&bus->spmic->dev, "virq = %u, hwirq = %lu, type = %u\n", in qpnpint_irq_domain_map()
961 irq_domain_set_info(domain, virq, hwirq, &pmic_arb_irqchip, bus, in qpnpint_irq_domain_map()
969 struct spmi_pmic_arb_bus *bus = domain->host_data; in qpnpint_irq_domain_alloc() local
980 qpnpint_irq_domain_map(bus, domain, virq + i, hwirq + i, in qpnpint_irq_domain_alloc()
986 static int pmic_arb_init_apid_min_max(struct spmi_pmic_arb_bus *bus) in pmic_arb_init_apid_min_max() argument
988 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb; in pmic_arb_init_apid_min_max()
994 bus->max_apid = 0; in pmic_arb_init_apid_min_max()
995 bus->min_apid = pmic_arb->max_periphs - 1; in pmic_arb_init_apid_min_max()
1013 static int pmic_arb_init_apid_v1(struct spmi_pmic_arb_bus *bus, int index) in pmic_arb_init_apid_v1() argument
1015 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb; in pmic_arb_init_apid_v1()
1019 dev_err(&bus->spmic->dev, "Unsupported buses count %d detected\n", in pmic_arb_init_apid_v1()
1024 mapping_table = devm_kcalloc(&bus->spmic->dev, pmic_arb->max_periphs, in pmic_arb_init_apid_v1()
1029 bus->mapping_table = mapping_table; in pmic_arb_init_apid_v1()
1031 return pmic_arb_init_apid_min_max(bus); in pmic_arb_init_apid_v1()
1034 static int pmic_arb_ppid_to_apid_v1(struct spmi_pmic_arb_bus *bus, u16 ppid) in pmic_arb_ppid_to_apid_v1() argument
1036 u32 *mapping_table = bus->mapping_table; in pmic_arb_ppid_to_apid_v1()
1042 apid_valid = bus->ppid_to_apid[ppid]; in pmic_arb_ppid_to_apid_v1()
1049 if (!test_and_set_bit(index, bus->mapping_table_valid)) in pmic_arb_ppid_to_apid_v1()
1050 mapping_table[index] = readl_relaxed(bus->cnfg + in pmic_arb_ppid_to_apid_v1()
1060 bus->ppid_to_apid[ppid] in pmic_arb_ppid_to_apid_v1()
1062 bus->apid_data[apid].ppid = ppid; in pmic_arb_ppid_to_apid_v1()
1070 bus->ppid_to_apid[ppid] in pmic_arb_ppid_to_apid_v1()
1072 bus->apid_data[apid].ppid = ppid; in pmic_arb_ppid_to_apid_v1()
1082 static int pmic_arb_offset_v1(struct spmi_pmic_arb_bus *bus, u8 sid, u16 addr, in pmic_arb_offset_v1() argument
1085 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb; in pmic_arb_offset_v1()
1089 static u16 pmic_arb_find_apid(struct spmi_pmic_arb_bus *bus, u16 ppid) in pmic_arb_find_apid() argument
1091 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb; in pmic_arb_find_apid()
1092 struct apid_data *apidd = &bus->apid_data[bus->last_apid]; in pmic_arb_find_apid()
1096 for (apid = bus->last_apid; ; apid++, apidd++) { in pmic_arb_find_apid()
1101 regval = readl_relaxed(pmic_arb->ver_ops->apid_owner(bus, in pmic_arb_find_apid()
1111 bus->ppid_to_apid[id] = apid | PMIC_ARB_APID_VALID; in pmic_arb_find_apid()
1118 bus->last_apid = apid & ~PMIC_ARB_APID_VALID; in pmic_arb_find_apid()
1150 static int pmic_arb_ppid_to_apid_v2(struct spmi_pmic_arb_bus *bus, u16 ppid) in pmic_arb_ppid_to_apid_v2() argument
1154 apid_valid = bus->ppid_to_apid[ppid]; in pmic_arb_ppid_to_apid_v2()
1156 apid_valid = pmic_arb_find_apid(bus, ppid); in pmic_arb_ppid_to_apid_v2()
1163 static int pmic_arb_read_apid_map_v5(struct spmi_pmic_arb_bus *bus) in pmic_arb_read_apid_map_v5() argument
1165 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb; in pmic_arb_read_apid_map_v5()
1181 * the primary bus (0) and secondary bus (1) such that: in pmic_arb_read_apid_map_v5()
1182 * APID = 0 to N-1 are assigned to the primary bus in pmic_arb_read_apid_map_v5()
1183 * APID = N to N+M-1 are assigned to the secondary bus in pmic_arb_read_apid_map_v5()
1184 * where N = number of APIDs supported by the primary bus and in pmic_arb_read_apid_map_v5()
1185 * M = number of APIDs supported by the secondary bus in pmic_arb_read_apid_map_v5()
1187 apidd = &bus->apid_data[bus->base_apid]; in pmic_arb_read_apid_map_v5()
1188 apid_max = bus->base_apid + bus->apid_count; in pmic_arb_read_apid_map_v5()
1189 for (i = bus->base_apid; i < apid_max; i++, apidd++) { in pmic_arb_read_apid_map_v5()
1200 regval = readl_relaxed(pmic_arb->ver_ops->apid_owner(bus, i)); in pmic_arb_read_apid_map_v5()
1205 valid = bus->ppid_to_apid[ppid] & PMIC_ARB_APID_VALID; in pmic_arb_read_apid_map_v5()
1206 apid = bus->ppid_to_apid[ppid] & ~PMIC_ARB_APID_VALID; in pmic_arb_read_apid_map_v5()
1207 prev_apidd = &bus->apid_data[apid]; in pmic_arb_read_apid_map_v5()
1211 bus->ppid_to_apid[ppid] = i | PMIC_ARB_APID_VALID; in pmic_arb_read_apid_map_v5()
1222 bus->last_apid = i; in pmic_arb_read_apid_map_v5()
1226 dev_dbg(&bus->spmic->dev, "PPID APID Write-EE IRQ-EE\n"); in pmic_arb_read_apid_map_v5()
1228 apid = bus->ppid_to_apid[ppid]; in pmic_arb_read_apid_map_v5()
1231 apidd = &bus->apid_data[apid]; in pmic_arb_read_apid_map_v5()
1232 dev_dbg(&bus->spmic->dev, "%#03X %3u %2u %2u\n", in pmic_arb_read_apid_map_v5()
1240 static int pmic_arb_ppid_to_apid_v5(struct spmi_pmic_arb_bus *bus, u16 ppid) in pmic_arb_ppid_to_apid_v5() argument
1242 if (!(bus->ppid_to_apid[ppid] & PMIC_ARB_APID_VALID)) in pmic_arb_ppid_to_apid_v5()
1245 return bus->ppid_to_apid[ppid] & ~PMIC_ARB_APID_VALID; in pmic_arb_ppid_to_apid_v5()
1249 static int pmic_arb_offset_v2(struct spmi_pmic_arb_bus *bus, u8 sid, u16 addr, in pmic_arb_offset_v2() argument
1252 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb; in pmic_arb_offset_v2()
1258 rc = pmic_arb_ppid_to_apid_v2(bus, ppid); in pmic_arb_offset_v2()
1266 static int pmic_arb_init_apid_v5(struct spmi_pmic_arb_bus *bus, int index) in pmic_arb_init_apid_v5() argument
1268 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb; in pmic_arb_init_apid_v5()
1272 dev_err(&bus->spmic->dev, "Unsupported buses count %d detected\n", in pmic_arb_init_apid_v5()
1277 bus->base_apid = 0; in pmic_arb_init_apid_v5()
1278 bus->apid_count = readl_relaxed(pmic_arb->core + PMIC_ARB_FEATURES) & in pmic_arb_init_apid_v5()
1281 if (bus->base_apid + bus->apid_count > pmic_arb->max_periphs) { in pmic_arb_init_apid_v5()
1282 dev_err(&bus->spmic->dev, "Unsupported APID count %d detected\n", in pmic_arb_init_apid_v5()
1283 bus->base_apid + bus->apid_count); in pmic_arb_init_apid_v5()
1287 ret = pmic_arb_init_apid_min_max(bus); in pmic_arb_init_apid_v5()
1291 ret = pmic_arb_read_apid_map_v5(bus); in pmic_arb_init_apid_v5()
1293 dev_err(&bus->spmic->dev, "could not read APID->PPID mapping table, rc= %d\n", in pmic_arb_init_apid_v5()
1305 static int pmic_arb_offset_v5(struct spmi_pmic_arb_bus *bus, u8 sid, u16 addr, in pmic_arb_offset_v5() argument
1308 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb; in pmic_arb_offset_v5()
1314 rc = pmic_arb_ppid_to_apid_v5(bus, ppid); in pmic_arb_offset_v5()
1324 if (bus->apid_data[apid].write_ee != pmic_arb->ee) { in pmic_arb_offset_v5()
1325 dev_err(&bus->spmic->dev, "disallowed SPMI write to sid=%u, addr=0x%04X\n", in pmic_arb_offset_v5()
1349 * Only v7 supports 2 buses. Each bus will get a different apid count, read
1352 static int pmic_arb_init_apid_v7(struct spmi_pmic_arb_bus *bus, int index) in pmic_arb_init_apid_v7() argument
1354 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb; in pmic_arb_init_apid_v7()
1358 bus->base_apid = 0; in pmic_arb_init_apid_v7()
1359 bus->apid_count = readl_relaxed(pmic_arb->core + PMIC_ARB_FEATURES) & in pmic_arb_init_apid_v7()
1362 bus->base_apid = readl_relaxed(pmic_arb->core + PMIC_ARB_FEATURES) & in pmic_arb_init_apid_v7()
1364 bus->apid_count = readl_relaxed(pmic_arb->core + PMIC_ARB_FEATURES1) & in pmic_arb_init_apid_v7()
1367 dev_err(&bus->spmic->dev, "Unsupported buses count %d detected\n", in pmic_arb_init_apid_v7()
1368 bus->id); in pmic_arb_init_apid_v7()
1372 if (bus->base_apid + bus->apid_count > pmic_arb->max_periphs) { in pmic_arb_init_apid_v7()
1373 dev_err(&bus->spmic->dev, "Unsupported APID count %d detected\n", in pmic_arb_init_apid_v7()
1374 bus->base_apid + bus->apid_count); in pmic_arb_init_apid_v7()
1378 ret = pmic_arb_init_apid_min_max(bus); in pmic_arb_init_apid_v7()
1382 ret = pmic_arb_read_apid_map_v5(bus); in pmic_arb_init_apid_v7()
1384 dev_err(&bus->spmic->dev, "could not read APID->PPID mapping table, rc= %d\n", in pmic_arb_init_apid_v7()
1396 static int pmic_arb_offset_v7(struct spmi_pmic_arb_bus *bus, u8 sid, u16 addr, in pmic_arb_offset_v7() argument
1399 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb; in pmic_arb_offset_v7()
1405 rc = pmic_arb->ver_ops->ppid_to_apid(bus, ppid); in pmic_arb_offset_v7()
1415 if (bus->apid_data[apid].write_ee != pmic_arb->ee) { in pmic_arb_offset_v7()
1416 dev_err(&bus->spmic->dev, "disallowed SPMI write to sid=%u, addr=0x%04X\n", in pmic_arb_offset_v7()
1438 pmic_arb_owner_acc_status_v1(struct spmi_pmic_arb_bus *bus, u8 m, u16 n) in pmic_arb_owner_acc_status_v1() argument
1440 return bus->intr + 0x20 * m + 0x4 * n; in pmic_arb_owner_acc_status_v1()
1444 pmic_arb_owner_acc_status_v2(struct spmi_pmic_arb_bus *bus, u8 m, u16 n) in pmic_arb_owner_acc_status_v2() argument
1446 return bus->intr + 0x100000 + 0x1000 * m + 0x4 * n; in pmic_arb_owner_acc_status_v2()
1450 pmic_arb_owner_acc_status_v3(struct spmi_pmic_arb_bus *bus, u8 m, u16 n) in pmic_arb_owner_acc_status_v3() argument
1452 return bus->intr + 0x200000 + 0x1000 * m + 0x4 * n; in pmic_arb_owner_acc_status_v3()
1456 pmic_arb_owner_acc_status_v5(struct spmi_pmic_arb_bus *bus, u8 m, u16 n) in pmic_arb_owner_acc_status_v5() argument
1458 return bus->intr + 0x10000 * m + 0x4 * n; in pmic_arb_owner_acc_status_v5()
1462 pmic_arb_owner_acc_status_v7(struct spmi_pmic_arb_bus *bus, u8 m, u16 n) in pmic_arb_owner_acc_status_v7() argument
1464 return bus->intr + 0x1000 * m + 0x4 * n; in pmic_arb_owner_acc_status_v7()
1468 pmic_arb_acc_enable_v1(struct spmi_pmic_arb_bus *bus, u16 n) in pmic_arb_acc_enable_v1() argument
1470 return bus->intr + 0x200 + 0x4 * n; in pmic_arb_acc_enable_v1()
1474 pmic_arb_acc_enable_v2(struct spmi_pmic_arb_bus *bus, u16 n) in pmic_arb_acc_enable_v2() argument
1476 return bus->intr + 0x1000 * n; in pmic_arb_acc_enable_v2()
1480 pmic_arb_acc_enable_v5(struct spmi_pmic_arb_bus *bus, u16 n) in pmic_arb_acc_enable_v5() argument
1482 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb; in pmic_arb_acc_enable_v5()
1487 pmic_arb_acc_enable_v7(struct spmi_pmic_arb_bus *bus, u16 n) in pmic_arb_acc_enable_v7() argument
1489 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb; in pmic_arb_acc_enable_v7()
1494 pmic_arb_irq_status_v1(struct spmi_pmic_arb_bus *bus, u16 n) in pmic_arb_irq_status_v1() argument
1496 return bus->intr + 0x600 + 0x4 * n; in pmic_arb_irq_status_v1()
1500 pmic_arb_irq_status_v2(struct spmi_pmic_arb_bus *bus, u16 n) in pmic_arb_irq_status_v2() argument
1502 return bus->intr + 0x4 + 0x1000 * n; in pmic_arb_irq_status_v2()
1506 pmic_arb_irq_status_v5(struct spmi_pmic_arb_bus *bus, u16 n) in pmic_arb_irq_status_v5() argument
1508 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb; in pmic_arb_irq_status_v5()
1513 pmic_arb_irq_status_v7(struct spmi_pmic_arb_bus *bus, u16 n) in pmic_arb_irq_status_v7() argument
1515 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb; in pmic_arb_irq_status_v7()
1520 pmic_arb_irq_clear_v1(struct spmi_pmic_arb_bus *bus, u16 n) in pmic_arb_irq_clear_v1() argument
1522 return bus->intr + 0xA00 + 0x4 * n; in pmic_arb_irq_clear_v1()
1526 pmic_arb_irq_clear_v2(struct spmi_pmic_arb_bus *bus, u16 n) in pmic_arb_irq_clear_v2() argument
1528 return bus->intr + 0x8 + 0x1000 * n; in pmic_arb_irq_clear_v2()
1532 pmic_arb_irq_clear_v5(struct spmi_pmic_arb_bus *bus, u16 n) in pmic_arb_irq_clear_v5() argument
1534 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb; in pmic_arb_irq_clear_v5()
1539 pmic_arb_irq_clear_v7(struct spmi_pmic_arb_bus *bus, u16 n) in pmic_arb_irq_clear_v7() argument
1541 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb; in pmic_arb_irq_clear_v7()
1561 pmic_arb_apid_owner_v2(struct spmi_pmic_arb_bus *bus, u16 n) in pmic_arb_apid_owner_v2() argument
1563 return bus->cnfg + 0x700 + 0x4 * n; in pmic_arb_apid_owner_v2()
1568 * numbering space for each SPMI bus instance, so each is indexed starting from
1572 pmic_arb_apid_owner_v7(struct spmi_pmic_arb_bus *bus, u16 n) in pmic_arb_apid_owner_v7() argument
1574 return bus->cnfg + 0x4 * (n - bus->base_apid); in pmic_arb_apid_owner_v7()
1669 struct spmi_pmic_arb_bus *bus; in spmi_pmic_arb_bus_init() local
1677 ctrl = devm_spmi_controller_alloc(dev, sizeof(*bus)); in spmi_pmic_arb_bus_init()
1685 bus = spmi_controller_get_drvdata(ctrl); in spmi_pmic_arb_bus_init()
1687 pmic_arb->buses[bus_index] = bus; in spmi_pmic_arb_bus_init()
1689 raw_spin_lock_init(&bus->lock); in spmi_pmic_arb_bus_init()
1691 bus->ppid_to_apid = devm_kcalloc(dev, PMIC_ARB_MAX_PPID, in spmi_pmic_arb_bus_init()
1692 sizeof(*bus->ppid_to_apid), in spmi_pmic_arb_bus_init()
1694 if (!bus->ppid_to_apid) in spmi_pmic_arb_bus_init()
1697 bus->apid_data = devm_kcalloc(dev, pmic_arb->max_periphs, in spmi_pmic_arb_bus_init()
1698 sizeof(*bus->apid_data), in spmi_pmic_arb_bus_init()
1700 if (!bus->apid_data) in spmi_pmic_arb_bus_init()
1727 bus->pmic_arb = pmic_arb; in spmi_pmic_arb_bus_init()
1728 bus->intr = intr; in spmi_pmic_arb_bus_init()
1729 bus->cnfg = cnfg; in spmi_pmic_arb_bus_init()
1730 bus->irq = irq; in spmi_pmic_arb_bus_init()
1731 bus->spmic = ctrl; in spmi_pmic_arb_bus_init()
1732 bus->id = bus_index; in spmi_pmic_arb_bus_init()
1734 ret = pmic_arb->ver_ops->init_apid(bus, bus_index); in spmi_pmic_arb_bus_init()
1738 dev_dbg(&pdev->dev, "adding irq domain for bus %d\n", bus_index); in spmi_pmic_arb_bus_init()
1740 bus->domain = irq_domain_add_tree(node, &pmic_arb_irq_domain_ops, bus); in spmi_pmic_arb_bus_init()
1741 if (!bus->domain) { in spmi_pmic_arb_bus_init()
1746 irq_set_chained_handler_and_data(bus->irq, in spmi_pmic_arb_bus_init()
1747 pmic_arb_chained_irq, bus); in spmi_pmic_arb_bus_init()
1769 /* legacy mode doesn't provide child node for the bus */ in spmi_pmic_arb_register_buses()
1789 struct spmi_pmic_arb_bus *bus = pmic_arb->buses[i]; in spmi_pmic_arb_deregister_buses() local
1791 irq_set_chained_handler_and_data(bus->irq, in spmi_pmic_arb_deregister_buses()
1793 irq_domain_remove(bus->domain); in spmi_pmic_arb_deregister_buses()