Lines Matching refs:master
113 struct i3c_master_controller *master; in dev_to_i3cbus() local
118 master = dev_to_i3cmaster(dev); in dev_to_i3cbus()
120 return &master->bus; in dev_to_i3cbus()
125 struct i3c_master_controller *master; in dev_to_i3cdesc() local
130 master = dev_to_i3cmaster(dev); in dev_to_i3cdesc()
132 return master->this; in dev_to_i3cdesc()
606 static int i3c_set_hotjoin(struct i3c_master_controller *master, bool enable) in i3c_set_hotjoin() argument
610 if (!master || !master->ops) in i3c_set_hotjoin()
613 if (!master->ops->enable_hotjoin || !master->ops->disable_hotjoin) in i3c_set_hotjoin()
616 i3c_bus_normaluse_lock(&master->bus); in i3c_set_hotjoin()
619 ret = master->ops->enable_hotjoin(master); in i3c_set_hotjoin()
621 ret = master->ops->disable_hotjoin(master); in i3c_set_hotjoin()
623 master->hotjoin = enable; in i3c_set_hotjoin()
625 i3c_bus_normaluse_unlock(&master->bus); in i3c_set_hotjoin()
643 ret = i3c_set_hotjoin(i3cbus->cur_master->common.master, res); in hotjoin_store()
656 int i3c_master_enable_hotjoin(struct i3c_master_controller *master) in i3c_master_enable_hotjoin() argument
658 return i3c_set_hotjoin(master, true); in i3c_master_enable_hotjoin()
668 int i3c_master_disable_hotjoin(struct i3c_master_controller *master) in i3c_master_disable_hotjoin() argument
670 return i3c_set_hotjoin(master, false); in i3c_master_disable_hotjoin()
680 ret = sysfs_emit(buf, "%d\n", i3cbus->cur_master->common.master->hotjoin); in hotjoin_show()
705 struct i3c_master_controller *master = dev_to_i3cmaster(dev); in i3c_masterdev_release() local
708 if (master->wq) in i3c_masterdev_release()
709 destroy_workqueue(master->wq); in i3c_masterdev_release()
724 struct i3c_master_controller *master = i3c_bus_to_i3c_master(i3cbus); in i3c_bus_set_mode() local
751 dev_dbg(&master->dev, "i2c-scl = %ld Hz i3c-scl = %ld Hz\n", in i3c_bus_set_mode()
772 i3c_master_to_i2c_adapter(struct i3c_master_controller *master) in i3c_master_to_i2c_adapter() argument
774 return &master->i2c; in i3c_master_to_i2c_adapter()
783 i3c_master_alloc_i2c_dev(struct i3c_master_controller *master, in i3c_master_alloc_i2c_dev() argument
792 dev->common.master = master; in i3c_master_alloc_i2c_dev()
828 static int i3c_master_send_ccc_cmd_locked(struct i3c_master_controller *master, in i3c_master_send_ccc_cmd_locked() argument
833 if (!cmd || !master) in i3c_master_send_ccc_cmd_locked()
836 if (WARN_ON(master->init_done && in i3c_master_send_ccc_cmd_locked()
837 !rwsem_is_locked(&master->bus.lock))) in i3c_master_send_ccc_cmd_locked()
840 if (!master->ops->send_ccc_cmd) in i3c_master_send_ccc_cmd_locked()
846 if (master->ops->supports_ccc_cmd && in i3c_master_send_ccc_cmd_locked()
847 !master->ops->supports_ccc_cmd(master, cmd)) in i3c_master_send_ccc_cmd_locked()
850 ret = master->ops->send_ccc_cmd(master, cmd); in i3c_master_send_ccc_cmd_locked()
862 i3c_master_find_i2c_dev_by_addr(const struct i3c_master_controller *master, in i3c_master_find_i2c_dev_by_addr() argument
867 i3c_bus_for_each_i2cdev(&master->bus, dev) { in i3c_master_find_i2c_dev_by_addr()
885 int i3c_master_get_free_addr(struct i3c_master_controller *master, in i3c_master_get_free_addr() argument
888 return i3c_bus_get_free_addr(&master->bus, start_addr); in i3c_master_get_free_addr()
908 i3c_master_alloc_i3c_dev(struct i3c_master_controller *master, in i3c_master_alloc_i3c_dev() argument
917 dev->common.master = master; in i3c_master_alloc_i3c_dev()
924 static int i3c_master_rstdaa_locked(struct i3c_master_controller *master, in i3c_master_rstdaa_locked() argument
932 if (!master) in i3c_master_rstdaa_locked()
935 addrstat = i3c_bus_get_addr_slot_status(&master->bus, addr); in i3c_master_rstdaa_locked()
943 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_rstdaa_locked()
965 int i3c_master_entdaa_locked(struct i3c_master_controller *master) in i3c_master_entdaa_locked() argument
973 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_entdaa_locked()
980 static int i3c_master_enec_disec_locked(struct i3c_master_controller *master, in i3c_master_enec_disec_locked() argument
998 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_enec_disec_locked()
1018 int i3c_master_disec_locked(struct i3c_master_controller *master, u8 addr, in i3c_master_disec_locked() argument
1021 return i3c_master_enec_disec_locked(master, addr, false, evts); in i3c_master_disec_locked()
1039 int i3c_master_enec_locked(struct i3c_master_controller *master, u8 addr, in i3c_master_enec_locked() argument
1042 return i3c_master_enec_disec_locked(master, addr, true, evts); in i3c_master_enec_locked()
1065 int i3c_master_defslvs_locked(struct i3c_master_controller *master) in i3c_master_defslvs_locked() argument
1077 if (!master) in i3c_master_defslvs_locked()
1080 bus = i3c_master_get_bus(master); in i3c_master_defslvs_locked()
1084 if (i3cdev == master->this) in i3c_master_defslvs_locked()
1106 defslvs->master.bcr = master->this->info.bcr; in i3c_master_defslvs_locked()
1107 defslvs->master.dcr = master->this->info.dcr; in i3c_master_defslvs_locked()
1108 defslvs->master.dyn_addr = master->this->info.dyn_addr << 1; in i3c_master_defslvs_locked()
1109 defslvs->master.static_addr = I3C_BROADCAST_ADDR << 1; in i3c_master_defslvs_locked()
1120 if (i3cdev == master->this) in i3c_master_defslvs_locked()
1131 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_defslvs_locked()
1138 static int i3c_master_setda_locked(struct i3c_master_controller *master, in i3c_master_setda_locked() argument
1157 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_setda_locked()
1163 static int i3c_master_setdasa_locked(struct i3c_master_controller *master, in i3c_master_setdasa_locked() argument
1166 return i3c_master_setda_locked(master, static_addr, dyn_addr, true); in i3c_master_setdasa_locked()
1169 static int i3c_master_setnewda_locked(struct i3c_master_controller *master, in i3c_master_setnewda_locked() argument
1172 return i3c_master_setda_locked(master, oldaddr, newaddr, false); in i3c_master_setnewda_locked()
1175 static int i3c_master_getmrl_locked(struct i3c_master_controller *master, in i3c_master_getmrl_locked() argument
1195 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_getmrl_locked()
1217 static int i3c_master_getmwl_locked(struct i3c_master_controller *master, in i3c_master_getmwl_locked() argument
1230 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_getmwl_locked()
1247 static int i3c_master_getmxds_locked(struct i3c_master_controller *master, in i3c_master_getmxds_locked() argument
1261 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_getmxds_locked()
1268 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_getmxds_locked()
1291 static int i3c_master_gethdrcap_locked(struct i3c_master_controller *master, in i3c_master_gethdrcap_locked() argument
1305 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_gethdrcap_locked()
1322 static int i3c_master_getpid_locked(struct i3c_master_controller *master, in i3c_master_getpid_locked() argument
1335 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_getpid_locked()
1352 static int i3c_master_getbcr_locked(struct i3c_master_controller *master, in i3c_master_getbcr_locked() argument
1365 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_getbcr_locked()
1377 static int i3c_master_getdcr_locked(struct i3c_master_controller *master, in i3c_master_getdcr_locked() argument
1390 ret = i3c_master_send_ccc_cmd_locked(master, &cmd); in i3c_master_getdcr_locked()
1404 struct i3c_master_controller *master = i3c_dev_get_master(dev); in i3c_master_retrieve_dev_info() local
1411 slot_status = i3c_bus_get_addr_slot_status(&master->bus, in i3c_master_retrieve_dev_info()
1417 ret = i3c_master_getpid_locked(master, &dev->info); in i3c_master_retrieve_dev_info()
1421 ret = i3c_master_getbcr_locked(master, &dev->info); in i3c_master_retrieve_dev_info()
1425 ret = i3c_master_getdcr_locked(master, &dev->info); in i3c_master_retrieve_dev_info()
1430 ret = i3c_master_getmxds_locked(master, &dev->info); in i3c_master_retrieve_dev_info()
1438 i3c_master_getmrl_locked(master, &dev->info); in i3c_master_retrieve_dev_info()
1439 i3c_master_getmwl_locked(master, &dev->info); in i3c_master_retrieve_dev_info()
1442 ret = i3c_master_gethdrcap_locked(master, &dev->info); in i3c_master_retrieve_dev_info()
1452 struct i3c_master_controller *master = i3c_dev_get_master(dev); in i3c_master_put_i3c_addrs() local
1455 i3c_bus_set_addr_slot_status(&master->bus, in i3c_master_put_i3c_addrs()
1460 i3c_bus_set_addr_slot_status(&master->bus, dev->info.dyn_addr, in i3c_master_put_i3c_addrs()
1464 i3c_bus_set_addr_slot_status(&master->bus, dev->boardinfo->init_dyn_addr, in i3c_master_put_i3c_addrs()
1470 struct i3c_master_controller *master = i3c_dev_get_master(dev); in i3c_master_get_i3c_addrs() local
1477 status = i3c_bus_get_addr_slot_status(&master->bus, in i3c_master_get_i3c_addrs()
1486 i3c_bus_set_addr_slot_status(&master->bus, in i3c_master_get_i3c_addrs()
1499 status = i3c_bus_get_addr_slot_status(&master->bus, in i3c_master_get_i3c_addrs()
1504 i3c_bus_set_addr_slot_status(&master->bus, dev->info.dyn_addr, in i3c_master_get_i3c_addrs()
1512 i3c_bus_set_addr_slot_status(&master->bus, in i3c_master_get_i3c_addrs()
1519 static int i3c_master_attach_i3c_dev(struct i3c_master_controller *master, in i3c_master_attach_i3c_dev() argument
1536 if (master->this != dev && master->ops->attach_i3c_dev) { in i3c_master_attach_i3c_dev()
1537 ret = master->ops->attach_i3c_dev(dev); in i3c_master_attach_i3c_dev()
1544 list_add_tail(&dev->common.node, &master->bus.devs.i3c); in i3c_master_attach_i3c_dev()
1552 struct i3c_master_controller *master = i3c_dev_get_master(dev); in i3c_master_reattach_i3c_dev() local
1556 i3c_bus_set_addr_slot_status(&master->bus, in i3c_master_reattach_i3c_dev()
1560 i3c_bus_set_addr_slot_status(&master->bus, old_dyn_addr, in i3c_master_reattach_i3c_dev()
1564 if (master->ops->reattach_i3c_dev) { in i3c_master_reattach_i3c_dev()
1565 ret = master->ops->reattach_i3c_dev(dev, old_dyn_addr); in i3c_master_reattach_i3c_dev()
1577 struct i3c_master_controller *master = i3c_dev_get_master(dev); in i3c_master_detach_i3c_dev() local
1580 if (master->this != dev && master->ops->detach_i3c_dev) in i3c_master_detach_i3c_dev()
1581 master->ops->detach_i3c_dev(dev); in i3c_master_detach_i3c_dev()
1587 static int i3c_master_attach_i2c_dev(struct i3c_master_controller *master, in i3c_master_attach_i2c_dev() argument
1592 if (master->ops->attach_i2c_dev) { in i3c_master_attach_i2c_dev()
1593 ret = master->ops->attach_i2c_dev(dev); in i3c_master_attach_i2c_dev()
1598 list_add_tail(&dev->common.node, &master->bus.devs.i2c); in i3c_master_attach_i2c_dev()
1605 struct i3c_master_controller *master = i2c_dev_get_master(dev); in i3c_master_detach_i2c_dev() local
1609 if (master->ops->detach_i2c_dev) in i3c_master_detach_i2c_dev()
1610 master->ops->detach_i2c_dev(dev); in i3c_master_detach_i2c_dev()
1613 static int i3c_master_early_i3c_dev_add(struct i3c_master_controller *master, in i3c_master_early_i3c_dev_add() argument
1623 i3cdev = i3c_master_alloc_i3c_dev(master, &info); in i3c_master_early_i3c_dev_add()
1629 ret = i3c_master_attach_i3c_dev(master, i3cdev); in i3c_master_early_i3c_dev_add()
1633 ret = i3c_master_setdasa_locked(master, i3cdev->info.static_addr, in i3c_master_early_i3c_dev_add()
1650 i3c_master_rstdaa_locked(master, i3cdev->boardinfo->init_dyn_addr); in i3c_master_early_i3c_dev_add()
1660 i3c_master_register_new_i3c_devs(struct i3c_master_controller *master) in i3c_master_register_new_i3c_devs() argument
1665 if (!master->init_done) in i3c_master_register_new_i3c_devs()
1668 i3c_bus_for_each_i3cdev(&master->bus, desc) { in i3c_master_register_new_i3c_devs()
1669 if (desc->dev || !desc->info.dyn_addr || desc == master->this) in i3c_master_register_new_i3c_devs()
1676 desc->dev->bus = &master->bus; in i3c_master_register_new_i3c_devs()
1678 desc->dev->dev.parent = &master->dev; in i3c_master_register_new_i3c_devs()
1682 dev_set_name(&desc->dev->dev, "%d-%llx", master->bus.id, in i3c_master_register_new_i3c_devs()
1690 dev_err(&master->dev, in i3c_master_register_new_i3c_devs()
1712 int i3c_master_do_daa(struct i3c_master_controller *master) in i3c_master_do_daa() argument
1716 i3c_bus_maintenance_lock(&master->bus); in i3c_master_do_daa()
1717 ret = master->ops->do_daa(master); in i3c_master_do_daa()
1718 i3c_bus_maintenance_unlock(&master->bus); in i3c_master_do_daa()
1723 i3c_bus_normaluse_lock(&master->bus); in i3c_master_do_daa()
1724 i3c_master_register_new_i3c_devs(master); in i3c_master_do_daa()
1725 i3c_bus_normaluse_unlock(&master->bus); in i3c_master_do_daa()
1828 int i3c_master_set_info(struct i3c_master_controller *master, in i3c_master_set_info() argument
1834 if (!i3c_bus_dev_addr_is_avail(&master->bus, info->dyn_addr)) in i3c_master_set_info()
1838 master->secondary) in i3c_master_set_info()
1841 if (master->this) in i3c_master_set_info()
1844 i3cdev = i3c_master_alloc_i3c_dev(master, info); in i3c_master_set_info()
1848 master->this = i3cdev; in i3c_master_set_info()
1849 master->bus.cur_master = master->this; in i3c_master_set_info()
1851 ret = i3c_master_attach_i3c_dev(master, i3cdev); in i3c_master_set_info()
1864 static void i3c_master_detach_free_devs(struct i3c_master_controller *master) in i3c_master_detach_free_devs() argument
1869 list_for_each_entry_safe(i3cdev, i3ctmp, &master->bus.devs.i3c, in i3c_master_detach_free_devs()
1874 i3c_bus_set_addr_slot_status(&master->bus, in i3c_master_detach_free_devs()
1881 list_for_each_entry_safe(i2cdev, i2ctmp, &master->bus.devs.i2c, in i3c_master_detach_free_devs()
1884 i3c_bus_set_addr_slot_status(&master->bus, in i3c_master_detach_free_devs()
1923 static int i3c_master_bus_init(struct i3c_master_controller *master) in i3c_master_bus_init() argument
1935 list_for_each_entry(i2cboardinfo, &master->boardinfo.i2c, node) { in i3c_master_bus_init()
1936 status = i3c_bus_get_addr_slot_status(&master->bus, in i3c_master_bus_init()
1943 i3c_bus_set_addr_slot_status(&master->bus, in i3c_master_bus_init()
1947 i2cdev = i3c_master_alloc_i2c_dev(master, in i3c_master_bus_init()
1955 ret = i3c_master_attach_i2c_dev(master, i2cdev); in i3c_master_bus_init()
1966 ret = master->ops->bus_init(master); in i3c_master_bus_init()
1974 if (!master->this) { in i3c_master_bus_init()
1975 dev_err(&master->dev, in i3c_master_bus_init()
1981 if (master->ops->set_speed) { in i3c_master_bus_init()
1982 ret = master->ops->set_speed(master, I3C_OPEN_DRAIN_SLOW_SPEED); in i3c_master_bus_init()
1991 ret = i3c_master_rstdaa_locked(master, I3C_BROADCAST_ADDR); in i3c_master_bus_init()
1995 if (master->ops->set_speed) { in i3c_master_bus_init()
1996 ret = master->ops->set_speed(master, I3C_OPEN_DRAIN_NORMAL_SPEED); in i3c_master_bus_init()
2002 ret = i3c_master_disec_locked(master, I3C_BROADCAST_ADDR, in i3c_master_bus_init()
2015 list_for_each_entry(i3cboardinfo, &master->boardinfo.i3c, node) { in i3c_master_bus_init()
2024 ret = i3c_bus_get_addr_slot_status(&master->bus, in i3c_master_bus_init()
2032 i3c_bus_set_addr_slot_status_mask(&master->bus, in i3c_master_bus_init()
2046 i3c_master_early_i3c_dev_add(master, i3cboardinfo); in i3c_master_bus_init()
2049 ret = i3c_master_do_daa(master); in i3c_master_bus_init()
2056 i3c_master_rstdaa_locked(master, I3C_BROADCAST_ADDR); in i3c_master_bus_init()
2059 if (master->ops->bus_cleanup) in i3c_master_bus_init()
2060 master->ops->bus_cleanup(master); in i3c_master_bus_init()
2063 i3c_master_detach_free_devs(master); in i3c_master_bus_init()
2068 static void i3c_master_bus_cleanup(struct i3c_master_controller *master) in i3c_master_bus_cleanup() argument
2070 if (master->ops->bus_cleanup) in i3c_master_bus_cleanup()
2071 master->ops->bus_cleanup(master); in i3c_master_bus_cleanup()
2073 i3c_master_detach_free_devs(master); in i3c_master_bus_cleanup()
2078 struct i3c_master_controller *master = i3cdev->common.master; in i3c_master_attach_boardinfo() local
2081 list_for_each_entry(i3cboardinfo, &master->boardinfo.i3c, node) { in i3c_master_attach_boardinfo()
2094 struct i3c_master_controller *master = i3c_dev_get_master(refdev); in i3c_master_search_i3c_dev_duplicate() local
2097 i3c_bus_for_each_i3cdev(&master->bus, i3cdev) { in i3c_master_search_i3c_dev_duplicate()
2121 int i3c_master_add_i3c_dev_locked(struct i3c_master_controller *master, in i3c_master_add_i3c_dev_locked() argument
2131 if (!master) in i3c_master_add_i3c_dev_locked()
2134 newdev = i3c_master_alloc_i3c_dev(master, &info); in i3c_master_add_i3c_dev_locked()
2138 ret = i3c_master_attach_i3c_dev(master, newdev); in i3c_master_add_i3c_dev_locked()
2204 i3c_bus_get_addr_slot_status(&master->bus, expected_dyn_addr) == I3C_ADDR_SLOT_FREE) { in i3c_master_add_i3c_dev_locked()
2209 ret = i3c_master_setnewda_locked(master, in i3c_master_add_i3c_dev_locked()
2217 dev_err(&master->dev, in i3c_master_add_i3c_dev_locked()
2219 master->bus.id, newdev->info.pid); in i3c_master_add_i3c_dev_locked()
2234 dev_err(&master->dev, in i3c_master_add_i3c_dev_locked()
2236 master->bus.id, newdev->info.pid); in i3c_master_add_i3c_dev_locked()
2240 dev_err(&master->dev, in i3c_master_add_i3c_dev_locked()
2242 master->bus.id, newdev->info.pid); in i3c_master_add_i3c_dev_locked()
2265 of_i3c_master_add_i2c_boardinfo(struct i3c_master_controller *master, in of_i3c_master_add_i2c_boardinfo() argument
2269 struct device *dev = &master->dev; in of_i3c_master_add_i2c_boardinfo()
2293 list_add_tail(&boardinfo->node, &master->boardinfo.i2c); in of_i3c_master_add_i2c_boardinfo()
2300 of_i3c_master_add_i3c_boardinfo(struct i3c_master_controller *master, in of_i3c_master_add_i3c_boardinfo() argument
2304 struct device *dev = &master->dev; in of_i3c_master_add_i3c_boardinfo()
2316 addrstatus = i3c_bus_get_addr_slot_status(&master->bus, in of_i3c_master_add_i3c_boardinfo()
2328 addrstatus = i3c_bus_get_addr_slot_status(&master->bus, in of_i3c_master_add_i3c_boardinfo()
2342 list_add_tail(&boardinfo->node, &master->boardinfo.i3c); in of_i3c_master_add_i3c_boardinfo()
2347 static int of_i3c_master_add_dev(struct i3c_master_controller *master, in of_i3c_master_add_dev() argument
2353 if (!master) in of_i3c_master_add_dev()
2365 ret = of_i3c_master_add_i2c_boardinfo(master, node, reg); in of_i3c_master_add_dev()
2367 ret = of_i3c_master_add_i3c_boardinfo(master, node, reg); in of_i3c_master_add_dev()
2372 static int of_populate_i3c_bus(struct i3c_master_controller *master) in of_populate_i3c_bus() argument
2374 struct device *dev = &master->dev; in of_populate_i3c_bus()
2384 ret = of_i3c_master_add_dev(master, node); in of_populate_i3c_bus()
2397 master->bus.scl_rate.i2c = val; in of_populate_i3c_bus()
2400 master->bus.scl_rate.i3c = val; in of_populate_i3c_bus()
2408 struct i3c_master_controller *master = i2c_adapter_to_i3c_master(adap); in i3c_master_i2c_adapter_xfer() local
2413 if (!xfers || !master || nxfers <= 0) in i3c_master_i2c_adapter_xfer()
2416 if (!master->ops->i2c_xfers) in i3c_master_i2c_adapter_xfer()
2426 i3c_bus_normaluse_lock(&master->bus); in i3c_master_i2c_adapter_xfer()
2427 dev = i3c_master_find_i2c_dev_by_addr(master, addr); in i3c_master_i2c_adapter_xfer()
2431 ret = master->ops->i2c_xfers(dev, xfers, nxfers); in i3c_master_i2c_adapter_xfer()
2432 i3c_bus_normaluse_unlock(&master->bus); in i3c_master_i2c_adapter_xfer()
2456 struct i3c_master_controller *master = i2c_adapter_to_i3c_master(adap); in i3c_master_i2c_attach() local
2462 if (i3c_master_find_i2c_dev_by_addr(master, client->addr)) in i3c_master_i2c_attach()
2465 status = i3c_bus_get_addr_slot_status(&master->bus, client->addr); in i3c_master_i2c_attach()
2469 i3c_bus_set_addr_slot_status(&master->bus, client->addr, in i3c_master_i2c_attach()
2472 i2cdev = i3c_master_alloc_i2c_dev(master, client->addr, in i3c_master_i2c_attach()
2479 ret = i3c_master_attach_i2c_dev(master, i2cdev); in i3c_master_i2c_attach()
2488 i3c_bus_set_addr_slot_status(&master->bus, client->addr, in i3c_master_i2c_attach()
2496 struct i3c_master_controller *master = i2c_adapter_to_i3c_master(adap); in i3c_master_i2c_detach() local
2499 dev = i3c_master_find_i2c_dev_by_addr(master, client->addr); in i3c_master_i2c_detach()
2504 i3c_bus_set_addr_slot_status(&master->bus, dev->addr, in i3c_master_i2c_detach()
2522 struct i3c_master_controller *master; in i3c_i2c_notifier_call() local
2534 master = i2c_adapter_to_i3c_master(adap); in i3c_i2c_notifier_call()
2536 i3c_bus_maintenance_lock(&master->bus); in i3c_i2c_notifier_call()
2547 i3c_bus_maintenance_unlock(&master->bus); in i3c_i2c_notifier_call()
2556 static int i3c_master_i2c_adapter_init(struct i3c_master_controller *master) in i3c_master_i2c_adapter_init() argument
2558 struct i2c_adapter *adap = i3c_master_to_i2c_adapter(master); in i3c_master_i2c_adapter_init()
2563 adap->dev.parent = master->dev.parent; in i3c_master_i2c_adapter_init()
2564 adap->owner = master->dev.parent->driver->owner; in i3c_master_i2c_adapter_init()
2566 strscpy(adap->name, dev_name(master->dev.parent), sizeof(adap->name)); in i3c_master_i2c_adapter_init()
2570 id = of_alias_get_id(master->dev.of_node, "i2c"); in i3c_master_i2c_adapter_init()
2584 list_for_each_entry(i2cboardinfo, &master->boardinfo.i2c, node) { in i3c_master_i2c_adapter_init()
2585 i2cdev = i3c_master_find_i2c_dev_by_addr(master, in i3c_master_i2c_adapter_init()
2595 static void i3c_master_i2c_adapter_cleanup(struct i3c_master_controller *master) in i3c_master_i2c_adapter_cleanup() argument
2599 i2c_del_adapter(&master->i2c); in i3c_master_i2c_adapter_cleanup()
2601 i3c_bus_for_each_i2cdev(&master->bus, i2cdev) in i3c_master_i2c_adapter_cleanup()
2605 static void i3c_master_unregister_i3c_devs(struct i3c_master_controller *master) in i3c_master_unregister_i3c_devs() argument
2609 i3c_bus_for_each_i3cdev(&master->bus, i3cdev) { in i3c_master_unregister_i3c_devs()
2645 struct i3c_master_controller *master = i3c_dev_get_master(dev); in i3c_master_handle_ibi() local
2654 master->ops->recycle_ibi_slot(dev, slot); in i3c_master_handle_ibi()
2857 int i3c_master_register(struct i3c_master_controller *master, in i3c_master_register() argument
2863 struct i3c_bus *i3cbus = i3c_master_get_bus(master); in i3c_master_register()
2876 master->dev.parent = parent; in i3c_master_register()
2877 master->dev.of_node = of_node_get(parent->of_node); in i3c_master_register()
2878 master->dev.bus = &i3c_bus_type; in i3c_master_register()
2879 master->dev.type = &i3c_masterdev_type; in i3c_master_register()
2880 master->dev.release = i3c_masterdev_release; in i3c_master_register()
2881 master->ops = ops; in i3c_master_register()
2882 master->secondary = secondary; in i3c_master_register()
2883 INIT_LIST_HEAD(&master->boardinfo.i2c); in i3c_master_register()
2884 INIT_LIST_HEAD(&master->boardinfo.i3c); in i3c_master_register()
2886 ret = i3c_bus_init(i3cbus, master->dev.of_node); in i3c_master_register()
2890 device_initialize(&master->dev); in i3c_master_register()
2891 dev_set_name(&master->dev, "i3c-%d", i3cbus->id); in i3c_master_register()
2893 master->dev.dma_mask = parent->dma_mask; in i3c_master_register()
2894 master->dev.coherent_dma_mask = parent->coherent_dma_mask; in i3c_master_register()
2895 master->dev.dma_parms = parent->dma_parms; in i3c_master_register()
2897 ret = of_populate_i3c_bus(master); in i3c_master_register()
2901 list_for_each_entry(i2cbi, &master->boardinfo.i2c, node) { in i3c_master_register()
2928 master->wq = alloc_workqueue("%s", 0, 0, dev_name(parent)); in i3c_master_register()
2929 if (!master->wq) { in i3c_master_register()
2934 ret = i3c_master_bus_init(master); in i3c_master_register()
2938 ret = device_add(&master->dev); in i3c_master_register()
2946 ret = i3c_master_i2c_adapter_init(master); in i3c_master_register()
2952 pm_runtime_no_callbacks(&master->dev); in i3c_master_register()
2953 pm_suspend_ignore_children(&master->dev, true); in i3c_master_register()
2954 pm_runtime_enable(&master->dev); in i3c_master_register()
2960 master->init_done = true; in i3c_master_register()
2961 i3c_bus_normaluse_lock(&master->bus); in i3c_master_register()
2962 i3c_master_register_new_i3c_devs(master); in i3c_master_register()
2963 i3c_bus_normaluse_unlock(&master->bus); in i3c_master_register()
2968 device_del(&master->dev); in i3c_master_register()
2971 i3c_master_bus_cleanup(master); in i3c_master_register()
2974 put_device(&master->dev); in i3c_master_register()
2986 void i3c_master_unregister(struct i3c_master_controller *master) in i3c_master_unregister() argument
2988 i3c_bus_notify(&master->bus, I3C_NOTIFY_BUS_REMOVE); in i3c_master_unregister()
2990 i3c_master_i2c_adapter_cleanup(master); in i3c_master_unregister()
2991 i3c_master_unregister_i3c_devs(master); in i3c_master_unregister()
2992 i3c_master_bus_cleanup(master); in i3c_master_unregister()
2993 pm_runtime_disable(&master->dev); in i3c_master_unregister()
2994 device_unregister(&master->dev); in i3c_master_unregister()
3000 struct i3c_master_controller *master; in i3c_dev_setdasa_locked() local
3005 master = i3c_dev_get_master(dev); in i3c_dev_setdasa_locked()
3006 if (!master) in i3c_dev_setdasa_locked()
3013 return i3c_master_setdasa_locked(master, dev->info.static_addr, in i3c_dev_setdasa_locked()
3021 struct i3c_master_controller *master; in i3c_dev_do_priv_xfers_locked() local
3026 master = i3c_dev_get_master(dev); in i3c_dev_do_priv_xfers_locked()
3027 if (!master || !xfers) in i3c_dev_do_priv_xfers_locked()
3030 if (!master->ops->priv_xfers) in i3c_dev_do_priv_xfers_locked()
3033 return master->ops->priv_xfers(dev, xfers, nxfers); in i3c_dev_do_priv_xfers_locked()
3038 struct i3c_master_controller *master; in i3c_dev_disable_ibi_locked() local
3044 master = i3c_dev_get_master(dev); in i3c_dev_disable_ibi_locked()
3045 ret = master->ops->disable_ibi(dev); in i3c_dev_disable_ibi_locked()
3060 struct i3c_master_controller *master = i3c_dev_get_master(dev); in i3c_dev_enable_ibi_locked() local
3066 ret = master->ops->enable_ibi(dev); in i3c_dev_enable_ibi_locked()
3076 struct i3c_master_controller *master = i3c_dev_get_master(dev); in i3c_dev_request_ibi_locked() local
3080 if (!master->ops->request_ibi) in i3c_dev_request_ibi_locked()
3103 ret = master->ops->request_ibi(dev, req); in i3c_dev_request_ibi_locked()
3114 struct i3c_master_controller *master = i3c_dev_get_master(dev); in i3c_dev_free_ibi_locked() local
3122 master->ops->free_ibi(dev); in i3c_dev_free_ibi_locked()