Lines Matching full:master

71  * In other words, transfer requests passed to the I3C master can be submitted
72 * in parallel and I3C master drivers have to use their own locking to make
109 struct i3c_master_controller *master; in dev_to_i3cbus() local
114 master = dev_to_i3cmaster(dev); in dev_to_i3cbus()
116 return &master->bus; in dev_to_i3cbus()
121 struct i3c_master_controller *master; in dev_to_i3cdesc() local
126 master = dev_to_i3cmaster(dev); in dev_to_i3cdesc()
128 return master->this; in dev_to_i3cdesc()
514 struct i3c_master_controller *master = dev_to_i3cmaster(dev); in i3c_masterdev_release() local
517 if (master->wq) in i3c_masterdev_release()
518 destroy_workqueue(master->wq); in i3c_masterdev_release()
533 struct i3c_master_controller *master = i3c_bus_to_i3c_master(i3cbus); in i3c_bus_set_mode() local
560 dev_dbg(&master->dev, "i2c-scl = %ld Hz i3c-scl = %ld Hz\n", in i3c_bus_set_mode()
581 i3c_master_to_i2c_adapter(struct i3c_master_controller *master) in i3c_master_to_i2c_adapter() argument
583 return &master->i2c; in i3c_master_to_i2c_adapter()
592 i3c_master_alloc_i2c_dev(struct i3c_master_controller *master, in i3c_master_alloc_i2c_dev() argument
601 dev->common.master = master; in i3c_master_alloc_i2c_dev()
638 static int i3c_master_send_ccc_cmd_locked(struct i3c_master_controller *master, in i3c_master_send_ccc_cmd_locked() argument
643 if (!cmd || !master) in i3c_master_send_ccc_cmd_locked()
646 if (WARN_ON(master->init_done && in i3c_master_send_ccc_cmd_locked()
647 !rwsem_is_locked(&master->bus.lock))) in i3c_master_send_ccc_cmd_locked()
650 if (!master->ops->send_ccc_cmd) in i3c_master_send_ccc_cmd_locked()
656 if (master->ops->supports_ccc_cmd && in i3c_master_send_ccc_cmd_locked()
657 !master->ops->supports_ccc_cmd(master, cmd)) in i3c_master_send_ccc_cmd_locked()
660 ret = master->ops->send_ccc_cmd(master, cmd); in i3c_master_send_ccc_cmd_locked()
672 i3c_master_find_i2c_dev_by_addr(const struct i3c_master_controller *master, in i3c_master_find_i2c_dev_by_addr() argument
677 i3c_bus_for_each_i2cdev(&master->bus, dev) { in i3c_master_find_i2c_dev_by_addr()
687 * @master: I3C master object
695 int i3c_master_get_free_addr(struct i3c_master_controller *master, in i3c_master_get_free_addr() argument
698 return i3c_bus_get_free_addr(&master->bus, start_addr); in i3c_master_get_free_addr()
718 i3c_master_alloc_i3c_dev(struct i3c_master_controller *master, in i3c_master_alloc_i3c_dev() argument
727 dev->common.master = master; in i3c_master_alloc_i3c_dev()
734 static int i3c_master_rstdaa_locked(struct i3c_master_controller *master, in i3c_master_rstdaa_locked() argument
742 if (!master) in i3c_master_rstdaa_locked()
745 addrstat = i3c_bus_get_addr_slot_status(&master->bus, addr); in i3c_master_rstdaa_locked()
753 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_rstdaa_locked()
762 * @master: master used to send frames on the bus
767 * behind dynamic address assignment has to be handled in the I3C master
775 int i3c_master_entdaa_locked(struct i3c_master_controller *master) in i3c_master_entdaa_locked() argument
783 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_entdaa_locked()
790 static int i3c_master_enec_disec_locked(struct i3c_master_controller *master, in i3c_master_enec_disec_locked() argument
808 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_enec_disec_locked()
816 * @master: master used to send frames on the bus
828 int i3c_master_disec_locked(struct i3c_master_controller *master, u8 addr, in i3c_master_disec_locked() argument
831 return i3c_master_enec_disec_locked(master, addr, false, evts); in i3c_master_disec_locked()
837 * @master: master used to send frames on the bus
849 int i3c_master_enec_locked(struct i3c_master_controller *master, u8 addr, in i3c_master_enec_locked() argument
852 return i3c_master_enec_disec_locked(master, addr, true, evts); in i3c_master_enec_locked()
858 * @master: master used to send frames on the bus
860 * Send a DEFSLVS CCC command containing all the devices known to the @master.
867 * It should also be called if a master ACKed an Hot-Join request and assigned
875 int i3c_master_defslvs_locked(struct i3c_master_controller *master) in i3c_master_defslvs_locked() argument
887 if (!master) in i3c_master_defslvs_locked()
890 bus = i3c_master_get_bus(master); in i3c_master_defslvs_locked()
894 if (i3cdev == master->this) in i3c_master_defslvs_locked()
902 /* No other master on the bus, skip DEFSLVS. */ in i3c_master_defslvs_locked()
916 defslvs->master.bcr = master->this->info.bcr; in i3c_master_defslvs_locked()
917 defslvs->master.dcr = master->this->info.dcr; in i3c_master_defslvs_locked()
918 defslvs->master.dyn_addr = master->this->info.dyn_addr << 1; in i3c_master_defslvs_locked()
919 defslvs->master.static_addr = I3C_BROADCAST_ADDR << 1; in i3c_master_defslvs_locked()
929 /* Skip the I3C dev representing this master. */ in i3c_master_defslvs_locked()
930 if (i3cdev == master->this) in i3c_master_defslvs_locked()
941 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_defslvs_locked()
948 static int i3c_master_setda_locked(struct i3c_master_controller *master, in i3c_master_setda_locked() argument
967 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_setda_locked()
973 static int i3c_master_setdasa_locked(struct i3c_master_controller *master, in i3c_master_setdasa_locked() argument
976 return i3c_master_setda_locked(master, static_addr, dyn_addr, true); in i3c_master_setdasa_locked()
979 static int i3c_master_setnewda_locked(struct i3c_master_controller *master, in i3c_master_setnewda_locked() argument
982 return i3c_master_setda_locked(master, oldaddr, newaddr, false); in i3c_master_setnewda_locked()
985 static int i3c_master_getmrl_locked(struct i3c_master_controller *master, in i3c_master_getmrl_locked() argument
1007 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_getmrl_locked()
1027 static int i3c_master_getmwl_locked(struct i3c_master_controller *master, in i3c_master_getmwl_locked() argument
1040 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_getmwl_locked()
1057 static int i3c_master_getmxds_locked(struct i3c_master_controller *master, in i3c_master_getmxds_locked() argument
1071 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_getmxds_locked()
1093 static int i3c_master_gethdrcap_locked(struct i3c_master_controller *master, in i3c_master_gethdrcap_locked() argument
1107 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_gethdrcap_locked()
1124 static int i3c_master_getpid_locked(struct i3c_master_controller *master, in i3c_master_getpid_locked() argument
1137 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_getpid_locked()
1154 static int i3c_master_getbcr_locked(struct i3c_master_controller *master, in i3c_master_getbcr_locked() argument
1167 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_getbcr_locked()
1179 static int i3c_master_getdcr_locked(struct i3c_master_controller *master, in i3c_master_getdcr_locked() argument
1192 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_getdcr_locked()
1206 struct i3c_master_controller *master = i3c_dev_get_master(dev); in i3c_master_retrieve_dev_info() local
1213 slot_status = i3c_bus_get_addr_slot_status(&master->bus, in i3c_master_retrieve_dev_info()
1219 ret = i3c_master_getpid_locked(master, &dev->info); in i3c_master_retrieve_dev_info()
1223 ret = i3c_master_getbcr_locked(master, &dev->info); in i3c_master_retrieve_dev_info()
1227 ret = i3c_master_getdcr_locked(master, &dev->info); in i3c_master_retrieve_dev_info()
1232 ret = i3c_master_getmxds_locked(master, &dev->info); in i3c_master_retrieve_dev_info()
1240 i3c_master_getmrl_locked(master, &dev->info); in i3c_master_retrieve_dev_info()
1241 i3c_master_getmwl_locked(master, &dev->info); in i3c_master_retrieve_dev_info()
1244 ret = i3c_master_gethdrcap_locked(master, &dev->info); in i3c_master_retrieve_dev_info()
1254 struct i3c_master_controller *master = i3c_dev_get_master(dev); in i3c_master_put_i3c_addrs() local
1257 i3c_bus_set_addr_slot_status(&master->bus, in i3c_master_put_i3c_addrs()
1262 i3c_bus_set_addr_slot_status(&master->bus, dev->info.dyn_addr, in i3c_master_put_i3c_addrs()
1266 i3c_bus_set_addr_slot_status(&master->bus, dev->info.dyn_addr, in i3c_master_put_i3c_addrs()
1272 struct i3c_master_controller *master = i3c_dev_get_master(dev); in i3c_master_get_i3c_addrs() local
1279 status = i3c_bus_get_addr_slot_status(&master->bus, in i3c_master_get_i3c_addrs()
1284 i3c_bus_set_addr_slot_status(&master->bus, in i3c_master_get_i3c_addrs()
1297 status = i3c_bus_get_addr_slot_status(&master->bus, in i3c_master_get_i3c_addrs()
1302 i3c_bus_set_addr_slot_status(&master->bus, dev->info.dyn_addr, in i3c_master_get_i3c_addrs()
1310 i3c_bus_set_addr_slot_status(&master->bus, in i3c_master_get_i3c_addrs()
1317 static int i3c_master_attach_i3c_dev(struct i3c_master_controller *master, in i3c_master_attach_i3c_dev() argument
1333 /* Do not attach the master device itself. */ in i3c_master_attach_i3c_dev()
1334 if (master->this != dev && master->ops->attach_i3c_dev) { in i3c_master_attach_i3c_dev()
1335 ret = master->ops->attach_i3c_dev(dev); in i3c_master_attach_i3c_dev()
1342 list_add_tail(&dev->common.node, &master->bus.devs.i3c); in i3c_master_attach_i3c_dev()
1350 struct i3c_master_controller *master = i3c_dev_get_master(dev); in i3c_master_reattach_i3c_dev() local
1355 status = i3c_bus_get_addr_slot_status(&master->bus, in i3c_master_reattach_i3c_dev()
1359 i3c_bus_set_addr_slot_status(&master->bus, in i3c_master_reattach_i3c_dev()
1364 if (master->ops->reattach_i3c_dev) { in i3c_master_reattach_i3c_dev()
1365 ret = master->ops->reattach_i3c_dev(dev, old_dyn_addr); in i3c_master_reattach_i3c_dev()
1377 struct i3c_master_controller *master = i3c_dev_get_master(dev); in i3c_master_detach_i3c_dev() local
1379 /* Do not detach the master device itself. */ in i3c_master_detach_i3c_dev()
1380 if (master->this != dev && master->ops->detach_i3c_dev) in i3c_master_detach_i3c_dev()
1381 master->ops->detach_i3c_dev(dev); in i3c_master_detach_i3c_dev()
1387 static int i3c_master_attach_i2c_dev(struct i3c_master_controller *master, in i3c_master_attach_i2c_dev() argument
1392 if (master->ops->attach_i2c_dev) { in i3c_master_attach_i2c_dev()
1393 ret = master->ops->attach_i2c_dev(dev); in i3c_master_attach_i2c_dev()
1398 list_add_tail(&dev->common.node, &master->bus.devs.i2c); in i3c_master_attach_i2c_dev()
1405 struct i3c_master_controller *master = i2c_dev_get_master(dev); in i3c_master_detach_i2c_dev() local
1409 if (master->ops->detach_i2c_dev) in i3c_master_detach_i2c_dev()
1410 master->ops->detach_i2c_dev(dev); in i3c_master_detach_i2c_dev()
1415 struct i3c_master_controller *master = i3c_dev_get_master(dev); in i3c_master_pre_assign_dyn_addr() local
1422 ret = i3c_master_setdasa_locked(master, dev->info.static_addr, in i3c_master_pre_assign_dyn_addr()
1439 i3c_master_rstdaa_locked(master, dev->boardinfo->init_dyn_addr); in i3c_master_pre_assign_dyn_addr()
1443 i3c_master_register_new_i3c_devs(struct i3c_master_controller *master) in i3c_master_register_new_i3c_devs() argument
1448 if (!master->init_done) in i3c_master_register_new_i3c_devs()
1451 i3c_bus_for_each_i3cdev(&master->bus, desc) { in i3c_master_register_new_i3c_devs()
1452 if (desc->dev || !desc->info.dyn_addr || desc == master->this) in i3c_master_register_new_i3c_devs()
1459 desc->dev->bus = &master->bus; in i3c_master_register_new_i3c_devs()
1461 desc->dev->dev.parent = &master->dev; in i3c_master_register_new_i3c_devs()
1465 dev_set_name(&desc->dev->dev, "%d-%llx", master->bus.id, in i3c_master_register_new_i3c_devs()
1473 dev_err(&master->dev, in i3c_master_register_new_i3c_devs()
1480 * @master: master doing the DAA
1486 * The I3C device object is returned in case the master wants to attach
1493 int i3c_master_do_daa(struct i3c_master_controller *master) in i3c_master_do_daa() argument
1497 i3c_bus_maintenance_lock(&master->bus); in i3c_master_do_daa()
1498 ret = master->ops->do_daa(master); in i3c_master_do_daa()
1499 i3c_bus_maintenance_unlock(&master->bus); in i3c_master_do_daa()
1504 i3c_bus_normaluse_lock(&master->bus); in i3c_master_do_daa()
1505 i3c_master_register_new_i3c_devs(master); in i3c_master_do_daa()
1506 i3c_bus_normaluse_unlock(&master->bus); in i3c_master_do_daa()
1513 * i3c_master_set_info() - set master device information
1514 * @master: master used to send frames on the bus
1517 * Set master device info. This should be called from
1520 * Not all &i3c_device_info fields are meaningful for a master device.
1536 int i3c_master_set_info(struct i3c_master_controller *master, in i3c_master_set_info() argument
1542 if (!i3c_bus_dev_addr_is_avail(&master->bus, info->dyn_addr)) in i3c_master_set_info()
1546 master->secondary) in i3c_master_set_info()
1549 if (master->this) in i3c_master_set_info()
1552 i3cdev = i3c_master_alloc_i3c_dev(master, info); in i3c_master_set_info()
1556 master->this = i3cdev; in i3c_master_set_info()
1557 master->bus.cur_master = master->this; in i3c_master_set_info()
1559 ret = i3c_master_attach_i3c_dev(master, i3cdev); in i3c_master_set_info()
1572 static void i3c_master_detach_free_devs(struct i3c_master_controller *master) in i3c_master_detach_free_devs() argument
1577 list_for_each_entry_safe(i3cdev, i3ctmp, &master->bus.devs.i3c, in i3c_master_detach_free_devs()
1582 i3c_bus_set_addr_slot_status(&master->bus, in i3c_master_detach_free_devs()
1589 list_for_each_entry_safe(i2cdev, i2ctmp, &master->bus.devs.i2c, in i3c_master_detach_free_devs()
1592 i3c_bus_set_addr_slot_status(&master->bus, in i3c_master_detach_free_devs()
1601 * @master: main master initializing the bus
1606 * 1. Attach I2C and statically defined I3C devs to the master so that the
1607 * master can fill its internal device table appropriately
1610 * the master controller. That's usually where the bus mode is selected
1629 static int i3c_master_bus_init(struct i3c_master_controller *master) in i3c_master_bus_init() argument
1642 list_for_each_entry(i2cboardinfo, &master->boardinfo.i2c, node) { in i3c_master_bus_init()
1643 status = i3c_bus_get_addr_slot_status(&master->bus, in i3c_master_bus_init()
1650 i3c_bus_set_addr_slot_status(&master->bus, in i3c_master_bus_init()
1654 i2cdev = i3c_master_alloc_i2c_dev(master, i2cboardinfo); in i3c_master_bus_init()
1660 ret = i3c_master_attach_i2c_dev(master, i2cdev); in i3c_master_bus_init()
1666 list_for_each_entry(i3cboardinfo, &master->boardinfo.i3c, node) { in i3c_master_bus_init()
1672 status = i3c_bus_get_addr_slot_status(&master->bus, in i3c_master_bus_init()
1680 i3cdev = i3c_master_alloc_i3c_dev(master, &info); in i3c_master_bus_init()
1688 ret = i3c_master_attach_i3c_dev(master, i3cdev); in i3c_master_bus_init()
1699 ret = master->ops->bus_init(master); in i3c_master_bus_init()
1704 * The master device should have been instantiated in ->bus_init(), in i3c_master_bus_init()
1707 if (!master->this) { in i3c_master_bus_init()
1708 dev_err(&master->dev, in i3c_master_bus_init()
1718 ret = i3c_master_rstdaa_locked(master, I3C_BROADCAST_ADDR); in i3c_master_bus_init()
1723 ret = i3c_master_disec_locked(master, I3C_BROADCAST_ADDR, in i3c_master_bus_init()
1733 i3c_bus_for_each_i3cdev(&master->bus, i3cdev) in i3c_master_bus_init()
1736 ret = i3c_master_do_daa(master); in i3c_master_bus_init()
1743 i3c_master_rstdaa_locked(master, I3C_BROADCAST_ADDR); in i3c_master_bus_init()
1746 if (master->ops->bus_cleanup) in i3c_master_bus_init()
1747 master->ops->bus_cleanup(master); in i3c_master_bus_init()
1750 i3c_master_detach_free_devs(master); in i3c_master_bus_init()
1755 static void i3c_master_bus_cleanup(struct i3c_master_controller *master) in i3c_master_bus_cleanup() argument
1757 if (master->ops->bus_cleanup) in i3c_master_bus_cleanup()
1758 master->ops->bus_cleanup(master); in i3c_master_bus_cleanup()
1760 i3c_master_detach_free_devs(master); in i3c_master_bus_cleanup()
1766 struct i3c_master_controller *master = refdev->common.master; in i3c_master_search_i3c_dev_duplicate() local
1769 i3c_bus_for_each_i3cdev(&master->bus, i3cdev) { in i3c_master_search_i3c_dev_duplicate()
1779 * @master: master used to send frames on the bus
1786 * The I3C device object is returned in case the master wants to attach
1793 int i3c_master_add_i3c_dev_locked(struct i3c_master_controller *master, in i3c_master_add_i3c_dev_locked() argument
1803 if (!master) in i3c_master_add_i3c_dev_locked()
1806 newdev = i3c_master_alloc_i3c_dev(master, &info); in i3c_master_add_i3c_dev_locked()
1810 ret = i3c_master_attach_i3c_dev(master, newdev); in i3c_master_add_i3c_dev_locked()
1865 * master in i3c_master_add_i3c_dev_locked()
1877 * the address assigned by the master. in i3c_master_add_i3c_dev_locked()
1879 ret = i3c_master_setnewda_locked(master, in i3c_master_add_i3c_dev_locked()
1887 dev_err(&master->dev, in i3c_master_add_i3c_dev_locked()
1889 master->bus.id, newdev->info.pid); in i3c_master_add_i3c_dev_locked()
1904 dev_err(&master->dev, in i3c_master_add_i3c_dev_locked()
1906 master->bus.id, newdev->info.pid); in i3c_master_add_i3c_dev_locked()
1910 dev_err(&master->dev, in i3c_master_add_i3c_dev_locked()
1912 master->bus.id, newdev->info.pid); in i3c_master_add_i3c_dev_locked()
1935 of_i3c_master_add_i2c_boardinfo(struct i3c_master_controller *master, in of_i3c_master_add_i2c_boardinfo() argument
1939 struct device *dev = &master->dev; in of_i3c_master_add_i2c_boardinfo()
1956 dev_err(&master->dev, "I2C device with 10 bit address not supported."); in of_i3c_master_add_i2c_boardinfo()
1963 list_add_tail(&boardinfo->node, &master->boardinfo.i2c); in of_i3c_master_add_i2c_boardinfo()
1970 of_i3c_master_add_i3c_boardinfo(struct i3c_master_controller *master, in of_i3c_master_add_i3c_boardinfo() argument
1974 struct device *dev = &master->dev; in of_i3c_master_add_i3c_boardinfo()
1986 addrstatus = i3c_bus_get_addr_slot_status(&master->bus, in of_i3c_master_add_i3c_boardinfo()
1998 addrstatus = i3c_bus_get_addr_slot_status(&master->bus, in of_i3c_master_add_i3c_boardinfo()
2012 list_add_tail(&boardinfo->node, &master->boardinfo.i3c); in of_i3c_master_add_i3c_boardinfo()
2017 static int of_i3c_master_add_dev(struct i3c_master_controller *master, in of_i3c_master_add_dev() argument
2023 if (!master || !node) in of_i3c_master_add_dev()
2035 ret = of_i3c_master_add_i2c_boardinfo(master, node, reg); in of_i3c_master_add_dev()
2037 ret = of_i3c_master_add_i3c_boardinfo(master, node, reg); in of_i3c_master_add_dev()
2042 static int of_populate_i3c_bus(struct i3c_master_controller *master) in of_populate_i3c_bus() argument
2044 struct device *dev = &master->dev; in of_populate_i3c_bus()
2054 ret = of_i3c_master_add_dev(master, node); in of_populate_i3c_bus()
2067 master->bus.scl_rate.i2c = val; in of_populate_i3c_bus()
2070 master->bus.scl_rate.i3c = val; in of_populate_i3c_bus()
2078 struct i3c_master_controller *master = i2c_adapter_to_i3c_master(adap); in i3c_master_i2c_adapter_xfer() local
2083 if (!xfers || !master || nxfers <= 0) in i3c_master_i2c_adapter_xfer()
2086 if (!master->ops->i2c_xfers) in i3c_master_i2c_adapter_xfer()
2096 i3c_bus_normaluse_lock(&master->bus); in i3c_master_i2c_adapter_xfer()
2097 dev = i3c_master_find_i2c_dev_by_addr(master, addr); in i3c_master_i2c_adapter_xfer()
2101 ret = master->ops->i2c_xfers(dev, xfers, nxfers); in i3c_master_i2c_adapter_xfer()
2102 i3c_bus_normaluse_unlock(&master->bus); in i3c_master_i2c_adapter_xfer()
2117 static int i3c_master_i2c_adapter_init(struct i3c_master_controller *master) in i3c_master_i2c_adapter_init() argument
2119 struct i2c_adapter *adap = i3c_master_to_i2c_adapter(master); in i3c_master_i2c_adapter_init()
2123 adap->dev.parent = master->dev.parent; in i3c_master_i2c_adapter_init()
2124 adap->owner = master->dev.parent->driver->owner; in i3c_master_i2c_adapter_init()
2126 strncpy(adap->name, dev_name(master->dev.parent), sizeof(adap->name)); in i3c_master_i2c_adapter_init()
2140 i3c_bus_for_each_i2cdev(&master->bus, i2cdev) in i3c_master_i2c_adapter_init()
2146 static void i3c_master_i2c_adapter_cleanup(struct i3c_master_controller *master) in i3c_master_i2c_adapter_cleanup() argument
2150 i2c_del_adapter(&master->i2c); in i3c_master_i2c_adapter_cleanup()
2152 i3c_bus_for_each_i2cdev(&master->bus, i2cdev) in i3c_master_i2c_adapter_cleanup()
2156 static void i3c_master_unregister_i3c_devs(struct i3c_master_controller *master) in i3c_master_unregister_i3c_devs() argument
2160 i3c_bus_for_each_i3cdev(&master->bus, i3cdev) { in i3c_master_unregister_i3c_devs()
2184 queue_work(dev->common.master->wq, &slot->work); in i3c_master_queue_ibi()
2193 struct i3c_master_controller *master = i3c_dev_get_master(dev); in i3c_master_handle_ibi() local
2202 master->ops->recycle_ibi_slot(dev, slot); in i3c_master_handle_ibi()
2352 * master driver struct_master_controller_ops->recycle_ibi() method.
2385 * i3c_master_register() - register an I3C master
2386 * @master: master used to send frames on the bus
2387 * @parent: the parent device (the one that provides this I3C master
2389 * @ops: the master controller operations
2390 * @secondary: true if you are registering a secondary master. Will return
2405 int i3c_master_register(struct i3c_master_controller *master, in i3c_master_register() argument
2411 struct i3c_bus *i3cbus = i3c_master_get_bus(master); in i3c_master_register()
2424 master->dev.parent = parent; in i3c_master_register()
2425 master->dev.of_node = of_node_get(parent->of_node); in i3c_master_register()
2426 master->dev.bus = &i3c_bus_type; in i3c_master_register()
2427 master->dev.type = &i3c_masterdev_type; in i3c_master_register()
2428 master->dev.release = i3c_masterdev_release; in i3c_master_register()
2429 master->ops = ops; in i3c_master_register()
2430 master->secondary = secondary; in i3c_master_register()
2431 INIT_LIST_HEAD(&master->boardinfo.i2c); in i3c_master_register()
2432 INIT_LIST_HEAD(&master->boardinfo.i3c); in i3c_master_register()
2438 device_initialize(&master->dev); in i3c_master_register()
2439 dev_set_name(&master->dev, "i3c-%d", i3cbus->id); in i3c_master_register()
2441 ret = of_populate_i3c_bus(master); in i3c_master_register()
2445 list_for_each_entry(i2cbi, &master->boardinfo.i2c, node) { in i3c_master_register()
2472 master->wq = alloc_workqueue("%s", 0, 0, dev_name(parent)); in i3c_master_register()
2473 if (!master->wq) { in i3c_master_register()
2478 ret = i3c_master_bus_init(master); in i3c_master_register()
2482 ret = device_add(&master->dev); in i3c_master_register()
2490 ret = i3c_master_i2c_adapter_init(master); in i3c_master_register()
2498 master->init_done = true; in i3c_master_register()
2499 i3c_bus_normaluse_lock(&master->bus); in i3c_master_register()
2500 i3c_master_register_new_i3c_devs(master); in i3c_master_register()
2501 i3c_bus_normaluse_unlock(&master->bus); in i3c_master_register()
2506 device_del(&master->dev); in i3c_master_register()
2509 i3c_master_bus_cleanup(master); in i3c_master_register()
2512 put_device(&master->dev); in i3c_master_register()
2519 * i3c_master_unregister() - unregister an I3C master
2520 * @master: master used to send frames on the bus
2526 int i3c_master_unregister(struct i3c_master_controller *master) in i3c_master_unregister() argument
2528 i3c_master_i2c_adapter_cleanup(master); in i3c_master_unregister()
2529 i3c_master_unregister_i3c_devs(master); in i3c_master_unregister()
2530 i3c_master_bus_cleanup(master); in i3c_master_unregister()
2531 device_unregister(&master->dev); in i3c_master_unregister()
2541 struct i3c_master_controller *master; in i3c_dev_do_priv_xfers_locked() local
2546 master = i3c_dev_get_master(dev); in i3c_dev_do_priv_xfers_locked()
2547 if (!master || !xfers) in i3c_dev_do_priv_xfers_locked()
2550 if (!master->ops->priv_xfers) in i3c_dev_do_priv_xfers_locked()
2553 return master->ops->priv_xfers(dev, xfers, nxfers); in i3c_dev_do_priv_xfers_locked()
2558 struct i3c_master_controller *master; in i3c_dev_disable_ibi_locked() local
2564 master = i3c_dev_get_master(dev); in i3c_dev_disable_ibi_locked()
2565 ret = master->ops->disable_ibi(dev); in i3c_dev_disable_ibi_locked()
2580 struct i3c_master_controller *master = i3c_dev_get_master(dev); in i3c_dev_enable_ibi_locked() local
2586 ret = master->ops->enable_ibi(dev); in i3c_dev_enable_ibi_locked()
2596 struct i3c_master_controller *master = i3c_dev_get_master(dev); in i3c_dev_request_ibi_locked() local
2600 if (!master->ops->request_ibi) in i3c_dev_request_ibi_locked()
2617 ret = master->ops->request_ibi(dev, req); in i3c_dev_request_ibi_locked()
2628 struct i3c_master_controller *master = i3c_dev_get_master(dev); in i3c_dev_free_ibi_locked() local
2636 master->ops->free_ibi(dev); in i3c_dev_free_ibi_locked()