···161161Description:162162 These directories are just symbolic links to163163 /sys/bus/i3c/devices/i3c-<bus-id>/<bus-id>-<device-pid>.164164+165165+What: /sys/bus/i3c/devices/i3c-<bus-id>/<bus-id>-<device-pid>/dev_nack_retry_count166166+KernelVersion: 6.18167167+Contact: linux-i3c@vger.kernel.org168168+Description:169169+ Expose the dev_nak_retry_count which controls the number of170170+ automatic retries that will be performed by the controller when171171+ the target device returns a NACK response. A value of 0 disables172172+ the automatic retries. Exist only when I3C constroller supports173173+ this retry on nack feature.174174+
···533533static void svc_i3c_master_ibi_isr(struct svc_i3c_master *master)534534{535535 struct svc_i3c_i2c_dev_data *data;536536+ struct i3c_dev_desc *dev = NULL;536537 unsigned int ibitype, ibiaddr;537537- struct i3c_dev_desc *dev;538538 u32 status, val;539539 int ret;540540···627627 * for the slave to interrupt again.628628 */629629 if (svc_i3c_master_error(master)) {630630- if (master->ibi.tbq_slot) {630630+ if (master->ibi.tbq_slot && dev) {631631 data = i3c_dev_get_master_data(dev);632632 i3c_generic_ibi_recycle_slot(data->ibi_pool,633633 master->ibi.tbq_slot);
+14-10
include/linux/i3c/device.h
···2525 * @I3C_ERROR_M2: M2 error2626 *2727 * These are the standard error codes as defined by the I3C specification.2828- * When -EIO is returned by the i3c_device_do_priv_xfers() or2828+ * When -EIO is returned by the i3c_device_do_i3c_xfers() or2929 * i3c_device_send_hdr_cmds() one can check the error code in3030 * &struct_i3c_xfer.err or &struct i3c_hdr_cmd.err to get a better idea of3131 * what went wrong.···7878 } data;7979 enum i3c_error_code err;8080};8181-8282-/* keep back compatible */8383-#define i3c_priv_xfer i3c_xfer84818582/**8683 * enum i3c_dcr - I3C DCR values···305308 i3c_i2c_driver_unregister, \306309 __i2cdrv)307310311311+#if IS_ENABLED(CONFIG_I3C)308312int i3c_device_do_xfers(struct i3c_device *dev, struct i3c_xfer *xfers,309313 int nxfers, enum i3c_xfer_mode mode);310310-311311-static inline int i3c_device_do_priv_xfers(struct i3c_device *dev,312312- struct i3c_xfer *xfers,313313- int nxfers)314314+u32 i3c_device_get_supported_xfer_mode(struct i3c_device *dev);315315+#else316316+static inline int317317+i3c_device_do_xfers(struct i3c_device *dev, struct i3c_xfer *xfers,318318+ int nxfers, enum i3c_xfer_mode mode)314319{315315- return i3c_device_do_xfers(dev, xfers, nxfers, I3C_SDR);320320+ return -EOPNOTSUPP;316321}322322+323323+static inline u32 i3c_device_get_supported_xfer_mode(struct i3c_device *dev)324324+{325325+ return 0;326326+}327327+#endif317328318329int i3c_device_do_setdasa(struct i3c_device *dev);319330···363358void i3c_device_free_ibi(struct i3c_device *dev);364359int i3c_device_enable_ibi(struct i3c_device *dev);365360int i3c_device_disable_ibi(struct i3c_device *dev);366366-u32 i3c_device_get_supported_xfer_mode(struct i3c_device *dev);367361368362#endif /* I3C_DEV_H */
+6
include/linux/i3c/master.h
···462462 * @enable_hotjoin: enable hot join event detect.463463 * @disable_hotjoin: disable hot join event detect.464464 * @set_speed: adjust I3C open drain mode timing.465465+ * @set_dev_nack_retry: configure device NACK retry count for the master466466+ * controller.465467 */466468struct i3c_master_controller_ops {467469 int (*bus_init)(struct i3c_master_controller *master);···493491 int (*enable_hotjoin)(struct i3c_master_controller *master);494492 int (*disable_hotjoin)(struct i3c_master_controller *master);495493 int (*set_speed)(struct i3c_master_controller *master, enum i3c_open_drain_speed speed);494494+ int (*set_dev_nack_retry)(struct i3c_master_controller *master,495495+ unsigned long dev_nack_retry_cnt);496496};497497498498/**···518514 * in a thread context. Typical examples are Hot Join processing which519515 * requires taking the bus lock in maintenance, which in turn, can only520516 * be done from a sleep-able context517517+ * @dev_nack_retry_count: retry count when slave device nack521518 *522519 * A &struct i3c_master_controller has to be registered to the I3C subsystem523520 * through i3c_master_register(). None of &struct i3c_master_controller fields···539534 } boardinfo;540535 struct i3c_bus bus;541536 struct workqueue_struct *wq;537537+ unsigned int dev_nack_retry_count;542538};543539544540/**