Skip to content

Commit d8cc0b9

Browse files
committed
Merge tag 'i3c/for-6.19-2' of git://git.kernel.org/pub/scm/linux/kernel/git/i3c/linux
Pull further i3c update from Alexandre Belloni: "We are removing a legacy API callback and having this sooner rather than later will help ensuring no one introduces a new driver using it. I've also added patches removing the "__free(...) = NULL" pattern because I'm sure we won't avoid people sending those following the mailing list discussion..." * tag 'i3c/for-6.19-2' of git://git.kernel.org/pub/scm/linux/kernel/git/i3c/linux: i3c: adi: Fix confusing cleanup.h syntax i3c: master: Fix confusing cleanup.h syntax i3c: master: cleanup callback .priv_xfers() i3c: master: switch to use new callback .i3c_xfers() from .priv_xfers()
2 parents d324e9a + 136209e commit d8cc0b9

7 files changed

Lines changed: 28 additions & 49 deletions

File tree

drivers/i3c/master.c

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1742,11 +1742,10 @@ EXPORT_SYMBOL_GPL(i3c_master_do_daa);
17421742
struct i3c_dma *i3c_master_dma_map_single(struct device *dev, void *buf,
17431743
size_t len, bool force_bounce, enum dma_data_direction dir)
17441744
{
1745-
struct i3c_dma *dma_xfer __free(kfree) = NULL;
17461745
void *bounce __free(kfree) = NULL;
17471746
void *dma_buf = buf;
17481747

1749-
dma_xfer = kzalloc(sizeof(*dma_xfer), GFP_KERNEL);
1748+
struct i3c_dma *dma_xfer __free(kfree) = kzalloc(sizeof(*dma_xfer), GFP_KERNEL);
17501749
if (!dma_xfer)
17511750
return NULL;
17521751

@@ -2819,14 +2818,10 @@ EXPORT_SYMBOL_GPL(i3c_generic_ibi_recycle_slot);
28192818

28202819
static int i3c_master_check_ops(const struct i3c_master_controller_ops *ops)
28212820
{
2822-
if (!ops || !ops->bus_init ||
2821+
if (!ops || !ops->bus_init || !ops->i3c_xfers ||
28232822
!ops->send_ccc_cmd || !ops->do_daa || !ops->i2c_xfers)
28242823
return -EINVAL;
28252824

2826-
/* Must provide one of priv_xfers (SDR only) or i3c_xfers (all modes) */
2827-
if (!ops->priv_xfers && !ops->i3c_xfers)
2828-
return -EINVAL;
2829-
28302825
if (ops->request_ibi &&
28312826
(!ops->enable_ibi || !ops->disable_ibi || !ops->free_ibi ||
28322827
!ops->recycle_ibi_slot))
@@ -3031,13 +3026,7 @@ int i3c_dev_do_xfers_locked(struct i3c_dev_desc *dev, struct i3c_xfer *xfers,
30313026
if (mode != I3C_SDR && !(master->this->info.hdr_cap & BIT(mode)))
30323027
return -EOPNOTSUPP;
30333028

3034-
if (master->ops->i3c_xfers)
3035-
return master->ops->i3c_xfers(dev, xfers, nxfers, mode);
3036-
3037-
if (mode != I3C_SDR)
3038-
return -EINVAL;
3039-
3040-
return master->ops->priv_xfers(dev, xfers, nxfers);
3029+
return master->ops->i3c_xfers(dev, xfers, nxfers, mode);
30413030
}
30423031

30433032
int i3c_dev_disable_ibi_locked(struct i3c_dev_desc *dev)

drivers/i3c/master/adi-i3c-master.c

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -332,10 +332,9 @@ static int adi_i3c_master_send_ccc_cmd(struct i3c_master_controller *m,
332332
struct i3c_ccc_cmd *cmd)
333333
{
334334
struct adi_i3c_master *master = to_adi_i3c_master(m);
335-
struct adi_i3c_xfer *xfer __free(kfree) = NULL;
336335
struct adi_i3c_cmd *ccmd;
337336

338-
xfer = adi_i3c_master_alloc_xfer(master, 1);
337+
struct adi_i3c_xfer *xfer __free(kfree) = adi_i3c_master_alloc_xfer(master, 1);
339338
if (!xfer)
340339
return -ENOMEM;
341340

@@ -365,19 +364,18 @@ static int adi_i3c_master_send_ccc_cmd(struct i3c_master_controller *m,
365364
return 0;
366365
}
367366

368-
static int adi_i3c_master_priv_xfers(struct i3c_dev_desc *dev,
369-
struct i3c_priv_xfer *xfers,
370-
int nxfers)
367+
static int adi_i3c_master_i3c_xfers(struct i3c_dev_desc *dev,
368+
struct i3c_xfer *xfers,
369+
int nxfers, enum i3c_xfer_mode mode)
371370
{
372371
struct i3c_master_controller *m = i3c_dev_get_master(dev);
373372
struct adi_i3c_master *master = to_adi_i3c_master(m);
374-
struct adi_i3c_xfer *xfer __free(kfree) = NULL;
375373
int i, ret;
376374

377375
if (!nxfers)
378376
return 0;
379377

380-
xfer = adi_i3c_master_alloc_xfer(master, nxfers);
378+
struct adi_i3c_xfer *xfer __free(kfree) = adi_i3c_master_alloc_xfer(master, nxfers);
381379
if (!xfer)
382380
return -ENOMEM;
383381

@@ -777,7 +775,6 @@ static int adi_i3c_master_i2c_xfers(struct i2c_dev_desc *dev,
777775
{
778776
struct i3c_master_controller *m = i2c_dev_get_master(dev);
779777
struct adi_i3c_master *master = to_adi_i3c_master(m);
780-
struct adi_i3c_xfer *xfer __free(kfree) = NULL;
781778
int i;
782779

783780
if (!nxfers)
@@ -786,7 +783,8 @@ static int adi_i3c_master_i2c_xfers(struct i2c_dev_desc *dev,
786783
if (xfers[i].flags & I2C_M_TEN)
787784
return -EOPNOTSUPP;
788785
}
789-
xfer = adi_i3c_master_alloc_xfer(master, nxfers);
786+
787+
struct adi_i3c_xfer *xfer __free(kfree) = adi_i3c_master_alloc_xfer(master, nxfers);
790788
if (!xfer)
791789
return -ENOMEM;
792790

@@ -919,7 +917,7 @@ static const struct i3c_master_controller_ops adi_i3c_master_ops = {
919917
.do_daa = adi_i3c_master_do_daa,
920918
.supports_ccc_cmd = adi_i3c_master_supports_ccc_cmd,
921919
.send_ccc_cmd = adi_i3c_master_send_ccc_cmd,
922-
.priv_xfers = adi_i3c_master_priv_xfers,
920+
.i3c_xfers = adi_i3c_master_i3c_xfers,
923921
.i2c_xfers = adi_i3c_master_i2c_xfers,
924922
.request_ibi = adi_i3c_master_request_ibi,
925923
.enable_ibi = adi_i3c_master_enable_ibi,

drivers/i3c/master/dw-i3c-master.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -902,9 +902,9 @@ static int dw_i3c_master_daa(struct i3c_master_controller *m)
902902
return ret;
903903
}
904904

905-
static int dw_i3c_master_priv_xfers(struct i3c_dev_desc *dev,
906-
struct i3c_priv_xfer *i3c_xfers,
907-
int i3c_nxfers)
905+
static int dw_i3c_master_i3c_xfers(struct i3c_dev_desc *dev,
906+
struct i3c_xfer *i3c_xfers,
907+
int i3c_nxfers, enum i3c_xfer_mode mode)
908908
{
909909
struct dw_i3c_i2c_dev_data *data = i3c_dev_get_master_data(dev);
910910
struct i3c_master_controller *m = i3c_dev_get_master(dev);
@@ -1498,7 +1498,7 @@ static const struct i3c_master_controller_ops dw_mipi_i3c_ops = {
14981498
.do_daa = dw_i3c_master_daa,
14991499
.supports_ccc_cmd = dw_i3c_master_supports_ccc_cmd,
15001500
.send_ccc_cmd = dw_i3c_master_send_ccc_cmd,
1501-
.priv_xfers = dw_i3c_master_priv_xfers,
1501+
.i3c_xfers = dw_i3c_master_i3c_xfers,
15021502
.attach_i2c_dev = dw_i3c_master_attach_i2c_dev,
15031503
.detach_i2c_dev = dw_i3c_master_detach_i2c_dev,
15041504
.i2c_xfers = dw_i3c_master_i2c_xfers,

drivers/i3c/master/i3c-master-cdns.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -720,9 +720,9 @@ static int cdns_i3c_master_send_ccc_cmd(struct i3c_master_controller *m,
720720
return ret;
721721
}
722722

723-
static int cdns_i3c_master_priv_xfers(struct i3c_dev_desc *dev,
724-
struct i3c_priv_xfer *xfers,
725-
int nxfers)
723+
static int cdns_i3c_master_i3c_xfers(struct i3c_dev_desc *dev,
724+
struct i3c_xfer *xfers,
725+
int nxfers, enum i3c_xfer_mode mode)
726726
{
727727
struct i3c_master_controller *m = i3c_dev_get_master(dev);
728728
struct cdns_i3c_master *master = to_cdns_i3c_master(m);
@@ -1519,7 +1519,7 @@ static const struct i3c_master_controller_ops cdns_i3c_master_ops = {
15191519
.detach_i2c_dev = cdns_i3c_master_detach_i2c_dev,
15201520
.supports_ccc_cmd = cdns_i3c_master_supports_ccc_cmd,
15211521
.send_ccc_cmd = cdns_i3c_master_send_ccc_cmd,
1522-
.priv_xfers = cdns_i3c_master_priv_xfers,
1522+
.i3c_xfers = cdns_i3c_master_i3c_xfers,
15231523
.i2c_xfers = cdns_i3c_master_i2c_xfers,
15241524
.enable_ibi = cdns_i3c_master_enable_ibi,
15251525
.disable_ibi = cdns_i3c_master_disable_ibi,

drivers/i3c/master/mipi-i3c-hci/core.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -266,9 +266,9 @@ static int i3c_hci_daa(struct i3c_master_controller *m)
266266
return hci->cmd->perform_daa(hci);
267267
}
268268

269-
static int i3c_hci_priv_xfers(struct i3c_dev_desc *dev,
270-
struct i3c_priv_xfer *i3c_xfers,
271-
int nxfers)
269+
static int i3c_hci_i3c_xfers(struct i3c_dev_desc *dev,
270+
struct i3c_xfer *i3c_xfers, int nxfers,
271+
enum i3c_xfer_mode mode)
272272
{
273273
struct i3c_master_controller *m = i3c_dev_get_master(dev);
274274
struct i3c_hci *hci = to_i3c_hci(m);
@@ -515,7 +515,7 @@ static const struct i3c_master_controller_ops i3c_hci_ops = {
515515
.bus_cleanup = i3c_hci_bus_cleanup,
516516
.do_daa = i3c_hci_daa,
517517
.send_ccc_cmd = i3c_hci_send_ccc_cmd,
518-
.priv_xfers = i3c_hci_priv_xfers,
518+
.i3c_xfers = i3c_hci_i3c_xfers,
519519
.i2c_xfers = i3c_hci_i2c_xfers,
520520
.attach_i3c_dev = i3c_hci_attach_i3c_dev,
521521
.reattach_i3c_dev = i3c_hci_reattach_i3c_dev,

drivers/i3c/master/renesas-i3c.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -794,8 +794,8 @@ static int renesas_i3c_send_ccc_cmd(struct i3c_master_controller *m,
794794
return ret;
795795
}
796796

797-
static int renesas_i3c_priv_xfers(struct i3c_dev_desc *dev, struct i3c_priv_xfer *i3c_xfers,
798-
int i3c_nxfers)
797+
static int renesas_i3c_i3c_xfers(struct i3c_dev_desc *dev, struct i3c_xfer *i3c_xfers,
798+
int i3c_nxfers, enum i3c_xfer_mode mode)
799799
{
800800
struct i3c_master_controller *m = i3c_dev_get_master(dev);
801801
struct renesas_i3c *i3c = to_renesas_i3c(m);
@@ -1282,7 +1282,7 @@ static const struct i3c_master_controller_ops renesas_i3c_ops = {
12821282
.do_daa = renesas_i3c_daa,
12831283
.supports_ccc_cmd = renesas_i3c_supports_ccc_cmd,
12841284
.send_ccc_cmd = renesas_i3c_send_ccc_cmd,
1285-
.priv_xfers = renesas_i3c_priv_xfers,
1285+
.i3c_xfers = renesas_i3c_i3c_xfers,
12861286
.attach_i2c_dev = renesas_i3c_attach_i2c_dev,
12871287
.detach_i2c_dev = renesas_i3c_detach_i2c_dev,
12881288
.i2c_xfers = renesas_i3c_i2c_xfers,

include/linux/i3c/master.h

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -417,12 +417,8 @@ struct i3c_bus {
417417
* all CCC commands are supported.
418418
* @send_ccc_cmd: send a CCC command
419419
* This method is mandatory.
420-
* @priv_xfers: do one or several private I3C SDR transfers
421-
* This method is mandatory when i3c_xfers is not implemented. It
422-
* is deprecated.
423-
* @i3c_xfers: do one or several I3C SDR or HDR transfers
424-
* This method is mandatory when priv_xfers is not implemented but
425-
* should be implemented instead of priv_xfers.
420+
* @i3c_xfers: do one or several I3C SDR or HDR transfers.
421+
* This method is mandatory.
426422
* @attach_i2c_dev: called every time an I2C device is attached to the bus.
427423
* This is a good place to attach master controller specific
428424
* data to I2C devices.
@@ -478,10 +474,6 @@ struct i3c_master_controller_ops {
478474
const struct i3c_ccc_cmd *cmd);
479475
int (*send_ccc_cmd)(struct i3c_master_controller *master,
480476
struct i3c_ccc_cmd *cmd);
481-
/* Deprecated, please use i3c_xfers() */
482-
int (*priv_xfers)(struct i3c_dev_desc *dev,
483-
struct i3c_priv_xfer *xfers,
484-
int nxfers);
485477
int (*i3c_xfers)(struct i3c_dev_desc *dev,
486478
struct i3c_xfer *xfers,
487479
int nxfers, enum i3c_xfer_mode mode);

0 commit comments

Comments
 (0)