Lines Matching full:master

74  * In other words, transfer requests passed to the I3C master can be submitted
75 * in parallel and I3C master drivers have to use their own locking to make
112 struct i3c_master_controller *master; in dev_to_i3cbus() local
117 master = dev_to_i3cmaster(dev); in dev_to_i3cbus()
119 return &master->bus; in dev_to_i3cbus()
124 struct i3c_master_controller *master; in dev_to_i3cdesc() local
129 master = dev_to_i3cmaster(dev); in dev_to_i3cdesc()
131 return master->this; in dev_to_i3cdesc()
406 * Some master controllers (such as HCI) need to prepare the entire above transaction before
605 static int i3c_set_hotjoin(struct i3c_master_controller *master, bool enable) in i3c_set_hotjoin() argument
609 if (!master || !master->ops) in i3c_set_hotjoin()
612 if (!master->ops->enable_hotjoin || !master->ops->disable_hotjoin) in i3c_set_hotjoin()
615 i3c_bus_normaluse_lock(&master->bus); in i3c_set_hotjoin()
618 ret = master->ops->enable_hotjoin(master); in i3c_set_hotjoin()
620 ret = master->ops->disable_hotjoin(master); in i3c_set_hotjoin()
622 master->hotjoin = enable; in i3c_set_hotjoin()
624 i3c_bus_normaluse_unlock(&master->bus); in i3c_set_hotjoin()
642 ret = i3c_set_hotjoin(i3cbus->cur_master->common.master, res); in hotjoin_store()
651 * @master: I3C master object
655 int i3c_master_enable_hotjoin(struct i3c_master_controller *master) in i3c_master_enable_hotjoin() argument
657 return i3c_set_hotjoin(master, true); in i3c_master_enable_hotjoin()
663 * @master: I3C master object
667 int i3c_master_disable_hotjoin(struct i3c_master_controller *master) in i3c_master_disable_hotjoin() argument
669 return i3c_set_hotjoin(master, false); in i3c_master_disable_hotjoin()
679 ret = sysfs_emit(buf, "%d\n", i3cbus->cur_master->common.master->hotjoin); in hotjoin_show()
704 struct i3c_master_controller *master = dev_to_i3cmaster(dev); in i3c_masterdev_release() local
707 if (master->wq) in i3c_masterdev_release()
708 destroy_workqueue(master->wq); in i3c_masterdev_release()
723 struct i3c_master_controller *master = i3c_bus_to_i3c_master(i3cbus); in i3c_bus_set_mode() local
750 dev_dbg(&master->dev, "i2c-scl = %ld Hz i3c-scl = %ld Hz\n", in i3c_bus_set_mode()
771 i3c_master_to_i2c_adapter(struct i3c_master_controller *master) in i3c_master_to_i2c_adapter() argument
773 return &master->i2c; in i3c_master_to_i2c_adapter()
782 i3c_master_alloc_i2c_dev(struct i3c_master_controller *master, in i3c_master_alloc_i2c_dev() argument
791 dev->common.master = master; in i3c_master_alloc_i2c_dev()
827 static int i3c_master_send_ccc_cmd_locked(struct i3c_master_controller *master, in i3c_master_send_ccc_cmd_locked() argument
832 if (!cmd || !master) in i3c_master_send_ccc_cmd_locked()
835 if (WARN_ON(master->init_done && in i3c_master_send_ccc_cmd_locked()
836 !rwsem_is_locked(&master->bus.lock))) in i3c_master_send_ccc_cmd_locked()
839 if (!master->ops->send_ccc_cmd) in i3c_master_send_ccc_cmd_locked()
845 if (master->ops->supports_ccc_cmd && in i3c_master_send_ccc_cmd_locked()
846 !master->ops->supports_ccc_cmd(master, cmd)) in i3c_master_send_ccc_cmd_locked()
849 ret = master->ops->send_ccc_cmd(master, cmd); in i3c_master_send_ccc_cmd_locked()
861 i3c_master_find_i2c_dev_by_addr(const struct i3c_master_controller *master, in i3c_master_find_i2c_dev_by_addr() argument
866 i3c_bus_for_each_i2cdev(&master->bus, dev) { in i3c_master_find_i2c_dev_by_addr()
876 * @master: I3C master object
884 int i3c_master_get_free_addr(struct i3c_master_controller *master, in i3c_master_get_free_addr() argument
887 return i3c_bus_get_free_addr(&master->bus, start_addr); in i3c_master_get_free_addr()
907 i3c_master_alloc_i3c_dev(struct i3c_master_controller *master, in i3c_master_alloc_i3c_dev() argument
916 dev->common.master = master; in i3c_master_alloc_i3c_dev()
923 static int i3c_master_rstdaa_locked(struct i3c_master_controller *master, in i3c_master_rstdaa_locked() argument
931 if (!master) in i3c_master_rstdaa_locked()
934 addrstat = i3c_bus_get_addr_slot_status(&master->bus, addr); in i3c_master_rstdaa_locked()
942 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_rstdaa_locked()
951 * @master: master used to send frames on the bus
956 * behind dynamic address assignment has to be handled in the I3C master
964 int i3c_master_entdaa_locked(struct i3c_master_controller *master) in i3c_master_entdaa_locked() argument
972 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_entdaa_locked()
979 static int i3c_master_enec_disec_locked(struct i3c_master_controller *master, in i3c_master_enec_disec_locked() argument
997 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_enec_disec_locked()
1005 * @master: master used to send frames on the bus
1017 int i3c_master_disec_locked(struct i3c_master_controller *master, u8 addr, in i3c_master_disec_locked() argument
1020 return i3c_master_enec_disec_locked(master, addr, false, evts); in i3c_master_disec_locked()
1026 * @master: master used to send frames on the bus
1038 int i3c_master_enec_locked(struct i3c_master_controller *master, u8 addr, in i3c_master_enec_locked() argument
1041 return i3c_master_enec_disec_locked(master, addr, true, evts); in i3c_master_enec_locked()
1047 * @master: master used to send frames on the bus
1049 * Send a DEFSLVS CCC command containing all the devices known to the @master.
1056 * It should also be called if a master ACKed an Hot-Join request and assigned
1064 int i3c_master_defslvs_locked(struct i3c_master_controller *master) in i3c_master_defslvs_locked() argument
1076 if (!master) in i3c_master_defslvs_locked()
1079 bus = i3c_master_get_bus(master); in i3c_master_defslvs_locked()
1083 if (i3cdev == master->this) in i3c_master_defslvs_locked()
1091 /* No other master on the bus, skip DEFSLVS. */ in i3c_master_defslvs_locked()
1105 defslvs->master.bcr = master->this->info.bcr; in i3c_master_defslvs_locked()
1106 defslvs->master.dcr = master->this->info.dcr; in i3c_master_defslvs_locked()
1107 defslvs->master.dyn_addr = master->this->info.dyn_addr << 1; in i3c_master_defslvs_locked()
1108 defslvs->master.static_addr = I3C_BROADCAST_ADDR << 1; in i3c_master_defslvs_locked()
1118 /* Skip the I3C dev representing this master. */ in i3c_master_defslvs_locked()
1119 if (i3cdev == master->this) in i3c_master_defslvs_locked()
1130 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_defslvs_locked()
1137 static int i3c_master_setda_locked(struct i3c_master_controller *master, in i3c_master_setda_locked() argument
1156 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_setda_locked()
1162 static int i3c_master_setdasa_locked(struct i3c_master_controller *master, in i3c_master_setdasa_locked() argument
1165 return i3c_master_setda_locked(master, static_addr, dyn_addr, true); in i3c_master_setdasa_locked()
1168 static int i3c_master_setnewda_locked(struct i3c_master_controller *master, in i3c_master_setnewda_locked() argument
1171 return i3c_master_setda_locked(master, oldaddr, newaddr, false); in i3c_master_setnewda_locked()
1174 static int i3c_master_getmrl_locked(struct i3c_master_controller *master, in i3c_master_getmrl_locked() argument
1194 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_getmrl_locked()
1216 static int i3c_master_getmwl_locked(struct i3c_master_controller *master, in i3c_master_getmwl_locked() argument
1229 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_getmwl_locked()
1246 static int i3c_master_getmxds_locked(struct i3c_master_controller *master, in i3c_master_getmxds_locked() argument
1260 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_getmxds_locked()
1267 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_getmxds_locked()
1290 static int i3c_master_gethdrcap_locked(struct i3c_master_controller *master, in i3c_master_gethdrcap_locked() argument
1304 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_gethdrcap_locked()
1321 static int i3c_master_getpid_locked(struct i3c_master_controller *master, in i3c_master_getpid_locked() argument
1334 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_getpid_locked()
1351 static int i3c_master_getbcr_locked(struct i3c_master_controller *master, in i3c_master_getbcr_locked() argument
1364 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_getbcr_locked()
1376 static int i3c_master_getdcr_locked(struct i3c_master_controller *master, in i3c_master_getdcr_locked() argument
1389 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_getdcr_locked()
1403 struct i3c_master_controller *master = i3c_dev_get_master(dev); in i3c_master_retrieve_dev_info() local
1410 slot_status = i3c_bus_get_addr_slot_status(&master->bus, in i3c_master_retrieve_dev_info()
1416 ret = i3c_master_getpid_locked(master, &dev->info); in i3c_master_retrieve_dev_info()
1420 ret = i3c_master_getbcr_locked(master, &dev->info); in i3c_master_retrieve_dev_info()
1424 ret = i3c_master_getdcr_locked(master, &dev->info); in i3c_master_retrieve_dev_info()
1429 ret = i3c_master_getmxds_locked(master, &dev->info); in i3c_master_retrieve_dev_info()
1437 i3c_master_getmrl_locked(master, &dev->info); in i3c_master_retrieve_dev_info()
1438 i3c_master_getmwl_locked(master, &dev->info); in i3c_master_retrieve_dev_info()
1441 ret = i3c_master_gethdrcap_locked(master, &dev->info); in i3c_master_retrieve_dev_info()
1451 struct i3c_master_controller *master = i3c_dev_get_master(dev); in i3c_master_put_i3c_addrs() local
1454 i3c_bus_set_addr_slot_status(&master->bus, in i3c_master_put_i3c_addrs()
1459 i3c_bus_set_addr_slot_status(&master->bus, dev->info.dyn_addr, in i3c_master_put_i3c_addrs()
1463 i3c_bus_set_addr_slot_status(&master->bus, dev->boardinfo->init_dyn_addr, in i3c_master_put_i3c_addrs()
1469 struct i3c_master_controller *master = i3c_dev_get_master(dev); in i3c_master_get_i3c_addrs() local
1476 status = i3c_bus_get_addr_slot_status(&master->bus, in i3c_master_get_i3c_addrs()
1485 i3c_bus_set_addr_slot_status(&master->bus, in i3c_master_get_i3c_addrs()
1498 status = i3c_bus_get_addr_slot_status(&master->bus, in i3c_master_get_i3c_addrs()
1503 i3c_bus_set_addr_slot_status(&master->bus, dev->info.dyn_addr, in i3c_master_get_i3c_addrs()
1511 i3c_bus_set_addr_slot_status(&master->bus, in i3c_master_get_i3c_addrs()
1518 static int i3c_master_attach_i3c_dev(struct i3c_master_controller *master, in i3c_master_attach_i3c_dev() argument
1534 /* Do not attach the master device itself. */ in i3c_master_attach_i3c_dev()
1535 if (master->this != dev && master->ops->attach_i3c_dev) { in i3c_master_attach_i3c_dev()
1536 ret = master->ops->attach_i3c_dev(dev); in i3c_master_attach_i3c_dev()
1543 list_add_tail(&dev->common.node, &master->bus.devs.i3c); in i3c_master_attach_i3c_dev()
1551 struct i3c_master_controller *master = i3c_dev_get_master(dev); in i3c_master_reattach_i3c_dev() local
1555 i3c_bus_set_addr_slot_status(&master->bus, in i3c_master_reattach_i3c_dev()
1559 i3c_bus_set_addr_slot_status(&master->bus, old_dyn_addr, in i3c_master_reattach_i3c_dev()
1563 if (master->ops->reattach_i3c_dev) { in i3c_master_reattach_i3c_dev()
1564 ret = master->ops->reattach_i3c_dev(dev, old_dyn_addr); in i3c_master_reattach_i3c_dev()
1576 struct i3c_master_controller *master = i3c_dev_get_master(dev); in i3c_master_detach_i3c_dev() local
1578 /* Do not detach the master device itself. */ in i3c_master_detach_i3c_dev()
1579 if (master->this != dev && master->ops->detach_i3c_dev) in i3c_master_detach_i3c_dev()
1580 master->ops->detach_i3c_dev(dev); in i3c_master_detach_i3c_dev()
1586 static int i3c_master_attach_i2c_dev(struct i3c_master_controller *master, in i3c_master_attach_i2c_dev() argument
1591 if (master->ops->attach_i2c_dev) { in i3c_master_attach_i2c_dev()
1592 ret = master->ops->attach_i2c_dev(dev); in i3c_master_attach_i2c_dev()
1597 list_add_tail(&dev->common.node, &master->bus.devs.i2c); in i3c_master_attach_i2c_dev()
1604 struct i3c_master_controller *master = i2c_dev_get_master(dev); in i3c_master_detach_i2c_dev() local
1608 if (master->ops->detach_i2c_dev) in i3c_master_detach_i2c_dev()
1609 master->ops->detach_i2c_dev(dev); in i3c_master_detach_i2c_dev()
1612 static int i3c_master_early_i3c_dev_add(struct i3c_master_controller *master, in i3c_master_early_i3c_dev_add() argument
1622 i3cdev = i3c_master_alloc_i3c_dev(master, &info); in i3c_master_early_i3c_dev_add()
1628 ret = i3c_master_attach_i3c_dev(master, i3cdev); in i3c_master_early_i3c_dev_add()
1632 ret = i3c_master_setdasa_locked(master, i3cdev->info.static_addr, in i3c_master_early_i3c_dev_add()
1649 i3c_master_rstdaa_locked(master, i3cdev->boardinfo->init_dyn_addr); in i3c_master_early_i3c_dev_add()
1659 i3c_master_register_new_i3c_devs(struct i3c_master_controller *master) in i3c_master_register_new_i3c_devs() argument
1664 if (!master->init_done) in i3c_master_register_new_i3c_devs()
1667 i3c_bus_for_each_i3cdev(&master->bus, desc) { in i3c_master_register_new_i3c_devs()
1668 if (desc->dev || !desc->info.dyn_addr || desc == master->this) in i3c_master_register_new_i3c_devs()
1675 desc->dev->bus = &master->bus; in i3c_master_register_new_i3c_devs()
1677 desc->dev->dev.parent = &master->dev; in i3c_master_register_new_i3c_devs()
1681 dev_set_name(&desc->dev->dev, "%d-%llx", master->bus.id, in i3c_master_register_new_i3c_devs()
1689 dev_err(&master->dev, in i3c_master_register_new_i3c_devs()
1698 * @master: master doing the DAA
1704 * The I3C device object is returned in case the master wants to attach
1711 int i3c_master_do_daa(struct i3c_master_controller *master) in i3c_master_do_daa() argument
1715 i3c_bus_maintenance_lock(&master->bus); in i3c_master_do_daa()
1716 ret = master->ops->do_daa(master); in i3c_master_do_daa()
1717 i3c_bus_maintenance_unlock(&master->bus); in i3c_master_do_daa()
1722 i3c_bus_normaluse_lock(&master->bus); in i3c_master_do_daa()
1723 i3c_master_register_new_i3c_devs(master); in i3c_master_do_daa()
1724 i3c_bus_normaluse_unlock(&master->bus); in i3c_master_do_daa()
1731 * i3c_master_set_info() - set master device information
1732 * @master: master used to send frames on the bus
1735 * Set master device info. This should be called from
1738 * Not all &i3c_device_info fields are meaningful for a master device.
1754 int i3c_master_set_info(struct i3c_master_controller *master, in i3c_master_set_info() argument
1760 if (!i3c_bus_dev_addr_is_avail(&master->bus, info->dyn_addr)) in i3c_master_set_info()
1764 master->secondary) in i3c_master_set_info()
1767 if (master->this) in i3c_master_set_info()
1770 i3cdev = i3c_master_alloc_i3c_dev(master, info); in i3c_master_set_info()
1774 master->this = i3cdev; in i3c_master_set_info()
1775 master->bus.cur_master = master->this; in i3c_master_set_info()
1777 ret = i3c_master_attach_i3c_dev(master, i3cdev); in i3c_master_set_info()
1790 static void i3c_master_detach_free_devs(struct i3c_master_controller *master) in i3c_master_detach_free_devs() argument
1795 list_for_each_entry_safe(i3cdev, i3ctmp, &master->bus.devs.i3c, in i3c_master_detach_free_devs()
1800 i3c_bus_set_addr_slot_status(&master->bus, in i3c_master_detach_free_devs()
1807 list_for_each_entry_safe(i2cdev, i2ctmp, &master->bus.devs.i2c, in i3c_master_detach_free_devs()
1810 i3c_bus_set_addr_slot_status(&master->bus, in i3c_master_detach_free_devs()
1819 * @master: main master initializing the bus
1824 * 1. Attach I2C devs to the master so that the master can fill its internal
1828 * the master controller. That's usually where the bus mode is selected
1840 * devices to the master.
1849 static int i3c_master_bus_init(struct i3c_master_controller *master) in i3c_master_bus_init() argument
1861 list_for_each_entry(i2cboardinfo, &master->boardinfo.i2c, node) { in i3c_master_bus_init()
1862 status = i3c_bus_get_addr_slot_status(&master->bus, in i3c_master_bus_init()
1869 i3c_bus_set_addr_slot_status(&master->bus, in i3c_master_bus_init()
1873 i2cdev = i3c_master_alloc_i2c_dev(master, in i3c_master_bus_init()
1881 ret = i3c_master_attach_i2c_dev(master, i2cdev); in i3c_master_bus_init()
1892 ret = master->ops->bus_init(master); in i3c_master_bus_init()
1897 * The master device should have been instantiated in ->bus_init(), in i3c_master_bus_init()
1900 if (!master->this) { in i3c_master_bus_init()
1901 dev_err(&master->dev, in i3c_master_bus_init()
1907 if (master->ops->set_speed) { in i3c_master_bus_init()
1908 ret = master->ops->set_speed(master, I3C_OPEN_DRAIN_SLOW_SPEED); in i3c_master_bus_init()
1917 ret = i3c_master_rstdaa_locked(master, I3C_BROADCAST_ADDR); in i3c_master_bus_init()
1921 if (master->ops->set_speed) { in i3c_master_bus_init()
1922 ret = master->ops->set_speed(master, I3C_OPEN_DRAIN_NORMAL_SPEED); in i3c_master_bus_init()
1928 ret = i3c_master_disec_locked(master, I3C_BROADCAST_ADDR, in i3c_master_bus_init()
1941 list_for_each_entry(i3cboardinfo, &master->boardinfo.i3c, node) { in i3c_master_bus_init()
1950 ret = i3c_bus_get_addr_slot_status(&master->bus, in i3c_master_bus_init()
1958 i3c_bus_set_addr_slot_status_mask(&master->bus, in i3c_master_bus_init()
1972 i3c_master_early_i3c_dev_add(master, i3cboardinfo); in i3c_master_bus_init()
1975 ret = i3c_master_do_daa(master); in i3c_master_bus_init()
1982 i3c_master_rstdaa_locked(master, I3C_BROADCAST_ADDR); in i3c_master_bus_init()
1985 if (master->ops->bus_cleanup) in i3c_master_bus_init()
1986 master->ops->bus_cleanup(master); in i3c_master_bus_init()
1989 i3c_master_detach_free_devs(master); in i3c_master_bus_init()
1994 static void i3c_master_bus_cleanup(struct i3c_master_controller *master) in i3c_master_bus_cleanup() argument
1996 if (master->ops->bus_cleanup) in i3c_master_bus_cleanup()
1997 master->ops->bus_cleanup(master); in i3c_master_bus_cleanup()
1999 i3c_master_detach_free_devs(master); in i3c_master_bus_cleanup()
2004 struct i3c_master_controller *master = i3cdev->common.master; in i3c_master_attach_boardinfo() local
2007 list_for_each_entry(i3cboardinfo, &master->boardinfo.i3c, node) { in i3c_master_attach_boardinfo()
2020 struct i3c_master_controller *master = i3c_dev_get_master(refdev); in i3c_master_search_i3c_dev_duplicate() local
2023 i3c_bus_for_each_i3cdev(&master->bus, i3cdev) { in i3c_master_search_i3c_dev_duplicate()
2033 * @master: master used to send frames on the bus
2040 * The I3C device object is returned in case the master wants to attach
2047 int i3c_master_add_i3c_dev_locked(struct i3c_master_controller *master, in i3c_master_add_i3c_dev_locked() argument
2057 if (!master) in i3c_master_add_i3c_dev_locked()
2060 newdev = i3c_master_alloc_i3c_dev(master, &info); in i3c_master_add_i3c_dev_locked()
2064 ret = i3c_master_attach_i3c_dev(master, newdev); in i3c_master_add_i3c_dev_locked()
2120 * master in i3c_master_add_i3c_dev_locked()
2130 i3c_bus_get_addr_slot_status(&master->bus, expected_dyn_addr) == I3C_ADDR_SLOT_FREE) { in i3c_master_add_i3c_dev_locked()
2133 * the address assigned by the master. in i3c_master_add_i3c_dev_locked()
2135 ret = i3c_master_setnewda_locked(master, in i3c_master_add_i3c_dev_locked()
2143 dev_err(&master->dev, in i3c_master_add_i3c_dev_locked()
2145 master->bus.id, newdev->info.pid); in i3c_master_add_i3c_dev_locked()
2160 dev_err(&master->dev, in i3c_master_add_i3c_dev_locked()
2162 master->bus.id, newdev->info.pid); in i3c_master_add_i3c_dev_locked()
2166 dev_err(&master->dev, in i3c_master_add_i3c_dev_locked()
2168 master->bus.id, newdev->info.pid); in i3c_master_add_i3c_dev_locked()
2191 of_i3c_master_add_i2c_boardinfo(struct i3c_master_controller *master, in of_i3c_master_add_i2c_boardinfo() argument
2195 struct device *dev = &master->dev; in of_i3c_master_add_i2c_boardinfo()
2219 list_add_tail(&boardinfo->node, &master->boardinfo.i2c); in of_i3c_master_add_i2c_boardinfo()
2226 of_i3c_master_add_i3c_boardinfo(struct i3c_master_controller *master, in of_i3c_master_add_i3c_boardinfo() argument
2230 struct device *dev = &master->dev; in of_i3c_master_add_i3c_boardinfo()
2242 addrstatus = i3c_bus_get_addr_slot_status(&master->bus, in of_i3c_master_add_i3c_boardinfo()
2254 addrstatus = i3c_bus_get_addr_slot_status(&master->bus, in of_i3c_master_add_i3c_boardinfo()
2268 list_add_tail(&boardinfo->node, &master->boardinfo.i3c); in of_i3c_master_add_i3c_boardinfo()
2273 static int of_i3c_master_add_dev(struct i3c_master_controller *master, in of_i3c_master_add_dev() argument
2279 if (!master || !node) in of_i3c_master_add_dev()
2291 ret = of_i3c_master_add_i2c_boardinfo(master, node, reg); in of_i3c_master_add_dev()
2293 ret = of_i3c_master_add_i3c_boardinfo(master, node, reg); in of_i3c_master_add_dev()
2298 static int of_populate_i3c_bus(struct i3c_master_controller *master) in of_populate_i3c_bus() argument
2300 struct device *dev = &master->dev; in of_populate_i3c_bus()
2310 ret = of_i3c_master_add_dev(master, node); in of_populate_i3c_bus()
2323 master->bus.scl_rate.i2c = val; in of_populate_i3c_bus()
2326 master->bus.scl_rate.i3c = val; in of_populate_i3c_bus()
2334 struct i3c_master_controller *master = i2c_adapter_to_i3c_master(adap); in i3c_master_i2c_adapter_xfer() local
2339 if (!xfers || !master || nxfers <= 0) in i3c_master_i2c_adapter_xfer()
2342 if (!master->ops->i2c_xfers) in i3c_master_i2c_adapter_xfer()
2352 i3c_bus_normaluse_lock(&master->bus); in i3c_master_i2c_adapter_xfer()
2353 dev = i3c_master_find_i2c_dev_by_addr(master, addr); in i3c_master_i2c_adapter_xfer()
2357 ret = master->ops->i2c_xfers(dev, xfers, nxfers); in i3c_master_i2c_adapter_xfer()
2358 i3c_bus_normaluse_unlock(&master->bus); in i3c_master_i2c_adapter_xfer()
2386 struct i3c_master_controller *master = i2c_adapter_to_i3c_master(adap); in i3c_master_i2c_attach() local
2392 if (i3c_master_find_i2c_dev_by_addr(master, client->addr)) in i3c_master_i2c_attach()
2395 status = i3c_bus_get_addr_slot_status(&master->bus, client->addr); in i3c_master_i2c_attach()
2399 i3c_bus_set_addr_slot_status(&master->bus, client->addr, in i3c_master_i2c_attach()
2402 i2cdev = i3c_master_alloc_i2c_dev(master, client->addr, in i3c_master_i2c_attach()
2409 ret = i3c_master_attach_i2c_dev(master, i2cdev); in i3c_master_i2c_attach()
2418 i3c_bus_set_addr_slot_status(&master->bus, client->addr, in i3c_master_i2c_attach()
2426 struct i3c_master_controller *master = i2c_adapter_to_i3c_master(adap); in i3c_master_i2c_detach() local
2429 dev = i3c_master_find_i2c_dev_by_addr(master, client->addr); in i3c_master_i2c_detach()
2434 i3c_bus_set_addr_slot_status(&master->bus, dev->addr, in i3c_master_i2c_detach()
2452 struct i3c_master_controller *master; in i3c_i2c_notifier_call() local
2464 master = i2c_adapter_to_i3c_master(adap); in i3c_i2c_notifier_call()
2466 i3c_bus_maintenance_lock(&master->bus); in i3c_i2c_notifier_call()
2475 i3c_bus_maintenance_unlock(&master->bus); in i3c_i2c_notifier_call()
2484 static int i3c_master_i2c_adapter_init(struct i3c_master_controller *master) in i3c_master_i2c_adapter_init() argument
2486 struct i2c_adapter *adap = i3c_master_to_i2c_adapter(master); in i3c_master_i2c_adapter_init()
2491 adap->dev.parent = master->dev.parent; in i3c_master_i2c_adapter_init()
2492 adap->owner = master->dev.parent->driver->owner; in i3c_master_i2c_adapter_init()
2494 strscpy(adap->name, dev_name(master->dev.parent), sizeof(adap->name)); in i3c_master_i2c_adapter_init()
2500 if (master->dev.of_node) in i3c_master_i2c_adapter_init()
2501 id = of_alias_get_id(master->dev.of_node, "i2c"); in i3c_master_i2c_adapter_init()
2516 list_for_each_entry(i2cboardinfo, &master->boardinfo.i2c, node) { in i3c_master_i2c_adapter_init()
2517 i2cdev = i3c_master_find_i2c_dev_by_addr(master, in i3c_master_i2c_adapter_init()
2527 static void i3c_master_i2c_adapter_cleanup(struct i3c_master_controller *master) in i3c_master_i2c_adapter_cleanup() argument
2531 i2c_del_adapter(&master->i2c); in i3c_master_i2c_adapter_cleanup()
2533 i3c_bus_for_each_i2cdev(&master->bus, i2cdev) in i3c_master_i2c_adapter_cleanup()
2537 static void i3c_master_unregister_i3c_devs(struct i3c_master_controller *master) in i3c_master_unregister_i3c_devs() argument
2541 i3c_bus_for_each_i3cdev(&master->bus, i3cdev) { in i3c_master_unregister_i3c_devs()
2577 struct i3c_master_controller *master = i3c_dev_get_master(dev); in i3c_master_handle_ibi() local
2586 master->ops->recycle_ibi_slot(dev, slot); in i3c_master_handle_ibi()
2736 * master driver struct_master_controller_ops->recycle_ibi() method.
2769 * i3c_master_register() - register an I3C master
2770 * @master: master used to send frames on the bus
2771 * @parent: the parent device (the one that provides this I3C master
2773 * @ops: the master controller operations
2774 * @secondary: true if you are registering a secondary master. Will return
2789 int i3c_master_register(struct i3c_master_controller *master, in i3c_master_register() argument
2795 struct i3c_bus *i3cbus = i3c_master_get_bus(master); in i3c_master_register()
2808 master->dev.parent = parent; in i3c_master_register()
2809 master->dev.of_node = of_node_get(parent->of_node); in i3c_master_register()
2810 master->dev.bus = &i3c_bus_type; in i3c_master_register()
2811 master->dev.type = &i3c_masterdev_type; in i3c_master_register()
2812 master->dev.release = i3c_masterdev_release; in i3c_master_register()
2813 master->ops = ops; in i3c_master_register()
2814 master->secondary = secondary; in i3c_master_register()
2815 INIT_LIST_HEAD(&master->boardinfo.i2c); in i3c_master_register()
2816 INIT_LIST_HEAD(&master->boardinfo.i3c); in i3c_master_register()
2818 ret = i3c_bus_init(i3cbus, master->dev.of_node); in i3c_master_register()
2822 device_initialize(&master->dev); in i3c_master_register()
2823 dev_set_name(&master->dev, "i3c-%d", i3cbus->id); in i3c_master_register()
2825 master->dev.dma_mask = parent->dma_mask; in i3c_master_register()
2826 master->dev.coherent_dma_mask = parent->coherent_dma_mask; in i3c_master_register()
2827 master->dev.dma_parms = parent->dma_parms; in i3c_master_register()
2829 ret = of_populate_i3c_bus(master); in i3c_master_register()
2833 list_for_each_entry(i2cbi, &master->boardinfo.i2c, node) { in i3c_master_register()
2860 master->wq = alloc_workqueue("%s", 0, 0, dev_name(parent)); in i3c_master_register()
2861 if (!master->wq) { in i3c_master_register()
2866 ret = i3c_master_bus_init(master); in i3c_master_register()
2870 ret = device_add(&master->dev); in i3c_master_register()
2878 ret = i3c_master_i2c_adapter_init(master); in i3c_master_register()
2884 pm_runtime_no_callbacks(&master->dev); in i3c_master_register()
2885 pm_suspend_ignore_children(&master->dev, true); in i3c_master_register()
2886 pm_runtime_enable(&master->dev); in i3c_master_register()
2892 master->init_done = true; in i3c_master_register()
2893 i3c_bus_normaluse_lock(&master->bus); in i3c_master_register()
2894 i3c_master_register_new_i3c_devs(master); in i3c_master_register()
2895 i3c_bus_normaluse_unlock(&master->bus); in i3c_master_register()
2900 device_del(&master->dev); in i3c_master_register()
2903 i3c_master_bus_cleanup(master); in i3c_master_register()
2906 put_device(&master->dev); in i3c_master_register()
2913 * i3c_master_unregister() - unregister an I3C master
2914 * @master: master used to send frames on the bus
2918 void i3c_master_unregister(struct i3c_master_controller *master) in i3c_master_unregister() argument
2920 i3c_bus_notify(&master->bus, I3C_NOTIFY_BUS_REMOVE); in i3c_master_unregister()
2922 i3c_master_i2c_adapter_cleanup(master); in i3c_master_unregister()
2923 i3c_master_unregister_i3c_devs(master); in i3c_master_unregister()
2924 i3c_master_bus_cleanup(master); in i3c_master_unregister()
2925 pm_runtime_disable(&master->dev); in i3c_master_unregister()
2926 device_unregister(&master->dev); in i3c_master_unregister()
2932 struct i3c_master_controller *master; in i3c_dev_setdasa_locked() local
2937 master = i3c_dev_get_master(dev); in i3c_dev_setdasa_locked()
2938 if (!master) in i3c_dev_setdasa_locked()
2945 return i3c_master_setdasa_locked(master, dev->info.static_addr, in i3c_dev_setdasa_locked()
2953 struct i3c_master_controller *master; in i3c_dev_do_priv_xfers_locked() local
2958 master = i3c_dev_get_master(dev); in i3c_dev_do_priv_xfers_locked()
2959 if (!master || !xfers) in i3c_dev_do_priv_xfers_locked()
2962 if (!master->ops->priv_xfers) in i3c_dev_do_priv_xfers_locked()
2965 return master->ops->priv_xfers(dev, xfers, nxfers); in i3c_dev_do_priv_xfers_locked()
2970 struct i3c_master_controller *master; in i3c_dev_disable_ibi_locked() local
2976 master = i3c_dev_get_master(dev); in i3c_dev_disable_ibi_locked()
2977 ret = master->ops->disable_ibi(dev); in i3c_dev_disable_ibi_locked()
2992 struct i3c_master_controller *master = i3c_dev_get_master(dev); in i3c_dev_enable_ibi_locked() local
2998 ret = master->ops->enable_ibi(dev); in i3c_dev_enable_ibi_locked()
3008 struct i3c_master_controller *master = i3c_dev_get_master(dev); in i3c_dev_request_ibi_locked() local
3012 if (!master->ops->request_ibi) in i3c_dev_request_ibi_locked()
3035 ret = master->ops->request_ibi(dev, req); in i3c_dev_request_ibi_locked()
3046 struct i3c_master_controller *master = i3c_dev_get_master(dev); in i3c_dev_free_ibi_locked() local
3054 master->ops->free_ibi(dev); in i3c_dev_free_ibi_locked()