Lines Matching full:i3c
4 * "DSP0233 Management Component Transport Protocol (MCTP) I3C Transport
13 #include <linux/i3c/device.h>
14 #include <linux/i3c/master.h>
73 struct i3c_device *i3c; member
82 /* I3C dynamic address */
128 /* Make sure netif_rx() is read in the same order as i3c. */ in mctp_i3c_read()
130 rc = i3c_device_do_priv_xfers(mi->i3c, &xfer, 1); in mctp_i3c_read()
135 /* Bad i3c bus driver */ in mctp_i3c_read()
179 static void mctp_i3c_ibi_handler(struct i3c_device *i3c, in mctp_i3c_ibi_handler() argument
182 struct mctp_i3c_device *mi = i3cdev_get_drvdata(i3c); in mctp_i3c_ibi_handler()
190 /* Not a mctp-i3c interrupt, ignore it */ in mctp_i3c_ibi_handler()
197 dev_warn_once(i3cdev_to_dev(i3c), "IBI with missing MDB"); in mctp_i3c_ibi_handler()
214 i3c_device_get_info(mi->i3c, &info); in mctp_i3c_setup()
221 rc = i3c_device_request_ibi(mi->i3c, &ibi); in mctp_i3c_setup()
225 * (ENOTSUPP is from the i3c layer, not EOPNOTSUPP). in mctp_i3c_setup()
227 dev_warn(i3cdev_to_dev(mi->i3c), in mctp_i3c_setup()
231 dev_err(i3cdev_to_dev(mi->i3c), in mctp_i3c_setup()
236 rc = i3c_device_enable_ibi(mi->i3c); in mctp_i3c_setup()
241 dev_err(i3cdev_to_dev(mi->i3c), "Failed enabling IBI (%d)\n", rc); in mctp_i3c_setup()
248 i3c_device_free_ibi(mi->i3c); in mctp_i3c_setup()
256 struct i3c_device *i3c) in mctp_i3c_add_device() argument
268 mi->i3c = i3c; in mctp_i3c_add_device()
272 i3cdev_set_drvdata(i3c, mi); in mctp_i3c_add_device()
284 dev_warn(i3cdev_to_dev(i3c), "Error adding mctp-i3c device, %d\n", rc); in mctp_i3c_add_device()
288 static int mctp_i3c_probe(struct i3c_device *i3c) in mctp_i3c_probe() argument
295 if (b->bus == i3c->bus) { in mctp_i3c_probe()
302 /* probably no "mctp-controller" property on the i3c bus */ in mctp_i3c_probe()
306 return mctp_i3c_add_device(mbus, i3c); in mctp_i3c_probe()
316 i3c_device_disable_ibi(mi->i3c); in mctp_i3c_remove_device()
317 i3c_device_free_ibi(mi->i3c); in mctp_i3c_remove_device()
320 i3cdev_set_drvdata(mi->i3c, NULL); in mctp_i3c_remove_device()
328 static void mctp_i3c_remove(struct i3c_device *i3c) in mctp_i3c_remove() argument
330 struct mctp_i3c_device *mi = i3cdev_get_drvdata(i3c); in mctp_i3c_remove()
380 /* I3C endpoint went away after the packet was enqueued? */ in mctp_i3c_xmit()
412 rc = i3c_device_do_priv_xfers(mi->i3c, &xfer, 1); in mctp_i3c_xmit()
604 dev_err(&ndev->dev, "No I3C PID available\n"); in mctp_i3c_bus_add()
652 /* Removes all mctp-i3c busses */
722 .name = "mctp-i3c",
756 pr_warn("MCTP I3C could not unregister notifier, %d\n", rc); in mctp_i3c_mod_exit()
764 MODULE_DEVICE_TABLE(i3c, mctp_i3c_ids);
765 MODULE_DESCRIPTION("MCTP I3C device");