NFC updates for net-next 2026-08-17

Improvements:
   nxp-nci: Add remove on IRQ error
   mrvl: spi: Unregister dev on allocation fail
 
 Cleanups:
   Drop __maybe_unused from acpi_device_id tables
   Drop unused assignment of acpi_device_id driver data
   Initialize acpi_device_id arrays using member names
   Unify style of acpi_device_id arrays
   Initialize mei_cl_device_idarrays using member names
   Drop __maybe_unused from of_device_id tables
   Unify style of of_device_id arrays
   Drop unused assignment of spi_device_id driver data
   Initialize spi_device_idarrays using member names
   Unify style of spi_device_id arrays
   Unify style of usb_device_id arrays
   pn544: Drop empty line between i2c_device_id array and MODULE_DEVICE_TABLE()
   trf7970a: Use NULL when no response is expected
 
 Modernization:
   st95hf: switch to using sleeping variants of gpiod API
 
 Others:
   MAINTAINERS: Add Matrix channel to the NFC subsystem
   pn533: fix memcpy overflow warning
 
 Signed-off-by: David Heidelberg <david@ixit.cz>
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEE13oJz+7cK71TpwR0YAI/xNNJIHIFAmqDawsACgkQYAI/xNNJ
 IHK+jQ/9GRiEvoGKnW7n5UJ3sLTUIha70I1Gos+1Qbit8xVysFX71RUbBpregtUo
 kSw3eyLvu1lfJ0J+5XFj/WPO/VT4dysdZqNHDdtspsx6gwNsV/Gn4DsvIEZhVsTJ
 dg96ahq6kE+sE+TKOJbJfRfXgpnmmOURaXpe6N7XRh/DgJZRQ54fF8zU4OIzmdtI
 IYw037/BNxpT5Er1eFk5/y4lh71z37VaTrzbqPl6aM5bbnlZP945STi5/uvsUIe/
 0CvqtpjhMu7tIlP7jilbnoK8YOgR6nfpqmKTrTJCveYiZVXEpyGDDGNbSeDfvgsl
 u4CCdBvmIkNDLsoGy4QP5aOOQSoACMwOEelMb1U+7+zIMRtYKDoR4vqZHf821zlb
 03M5aMjddKdKHX3nRAyRdkO8vqVGr30/GimE6lcPpXrSpCwPXBvryJ8nhUBsf6ja
 2dQv9y2ckQbkrp7UDc/NqILcUZ1q3Ca2nIRo08zFFlNYTbuzlpvedbtPOHnT1RkY
 jUZ2YcBjmTKS8FzfnQU5cBIl2Ssg4Yit7SXplZxI5wbcGOQHPVc7M+cdLaP+7Bnr
 mcnfRl1wrJI57SXEvGpaHmW2+WGWULcckPnXKD2IYVzvbpkjJyEqQFVr1cN8v0Sn
 9MmrdFIFSk/gBKK4X5qeCWjw2IuQk/vh/NhZDYzfX7ORAXu3VOw=
 =uCMU
 -----END PGP SIGNATURE-----

Merge tag 'nfc-net-next-20260817' of https://codeberg.org/linux-nfc/linux

David Heidelberg says:

====================
NFC updates for net-next 2026-08-17

Improvements:
  nxp-nci: Add remove on IRQ error
  mrvl: spi: Unregister dev on allocation fail

Cleanups:
  Drop __maybe_unused from acpi_device_id tables
  Drop unused assignment of acpi_device_id driver data
  Initialize acpi_device_id arrays using member names
  Unify style of acpi_device_id arrays
  Initialize mei_cl_device_idarrays using member names
  Drop __maybe_unused from of_device_id tables
  Unify style of of_device_id arrays
  Drop unused assignment of spi_device_id driver data
  Initialize spi_device_idarrays using member names
  Unify style of spi_device_id arrays
  Unify style of usb_device_id arrays
  pn544: Drop empty line between i2c_device_id array and MODULE_DEVICE_TABLE()
  trf7970a: Use NULL when no response is expected

Modernization:
  st95hf: switch to using sleeping variants of gpiod API

Others:
  MAINTAINERS: Add Matrix channel to the NFC subsystem
  pn533: fix memcpy overflow warning

* tag 'nfc-net-next-20260817' of https://codeberg.org/linux-nfc/linux:
  nfc: st95hf: switch to using sleeping variants of gpiod API
  MAINTAINERS: Add Matrix channel to the NFC subsystem
  nfc: Unify style of usb_device_id arrays
  nfc: Unify style of spi_device_id arrays
  nfc: Initialize spi_device_idarrays using member names
  nfc: Drop unused assignment of spi_device_id driver data
  nfc: Unify style of of_device_id arrays
  nfc: Drop __maybe_unused from of_device_id tables
  nfc: Initialize mei_cl_device_idarrays using member names
  nfc: pn544: Drop empty line between i2c_device_id array and MODULE_DEVICE_TABLE()
  nfc: Unify style of acpi_device_id arrays
  nfc: Initialize acpi_device_id arrays using member names
  nfc: Drop unused assignment of acpi_device_id driver data
  nfc: Drop __maybe_unused from acpi_device_id tables
  nfc: nxp-nci: Add remove on IRQ error
  nfc: mrvl: spi: Unregister dev on allocation fail
  nfc: trf7970a: Use NULL when no response is expected
  nfc: pn533: fix memcpy overflow warning
====================

Link: https://patch.msgid.link/7fc49075-884e-4284-b742-7057cbba4b17@ixit.cz
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Jakub Kicinski 2026-08-18 10:23:31 -07:00
commit b4a8e1fae5
20 changed files with 98 additions and 90 deletions

View File

@ -19114,6 +19114,7 @@ F: include/net/net_failover.h
NFC SUBSYSTEM
M: David Heidelberg <david@ixit.cz>
L: oe-linux-nfc@lists.linux.dev
C: https://matrix.to/#/#linux-nfc:ixit.cz
S: Maintained
T: git https://codeberg.org/linux-nfc/linux.git
F: Documentation/devicetree/bindings/net/nfc/

View File

@ -349,8 +349,8 @@ static void fdp_nci_i2c_remove(struct i2c_client *client)
}
static const struct acpi_device_id fdp_nci_i2c_acpi_match[] = {
{"INT339A", 0},
{}
{ .id = "INT339A" },
{ }
};
MODULE_DEVICE_TABLE(acpi, fdp_nci_i2c_acpi_match);

View File

@ -48,10 +48,12 @@ static void microread_mei_remove(struct mei_cl_device *cldev)
}
static struct mei_cl_device_id microread_mei_tbl[] = {
{ MICROREAD_DRIVER_NAME, MEI_NFC_UUID, MEI_CL_VERSION_ANY},
/* required last entry */
{ }
{
.name = MICROREAD_DRIVER_NAME,
.uuid = MEI_NFC_UUID,
.version = MEI_CL_VERSION_ANY,
},
{ /* required last entry */ }
};
MODULE_DEVICE_TABLE(mei, microread_mei_tbl);

View File

@ -245,9 +245,9 @@ static void nfcmrvl_i2c_remove(struct i2c_client *client)
}
static const struct of_device_id of_nfcmrvl_i2c_match[] __maybe_unused = {
{ .compatible = "marvell,nfc-i2c", },
{},
static const struct of_device_id of_nfcmrvl_i2c_match[] = {
{ .compatible = "marvell,nfc-i2c" },
{ }
};
MODULE_DEVICE_TABLE(of, of_nfcmrvl_i2c_match);

View File

@ -168,6 +168,10 @@ static int nfcmrvl_spi_probe(struct spi_device *spi)
drv_data->nci_spi = nci_spi_allocate_spi(drv_data->spi, 0, 10,
drv_data->priv->ndev);
if (!drv_data->nci_spi) {
nfcmrvl_nci_unregister_dev(drv_data->priv);
return -ENOMEM;
}
/* Init completion for slave handshake */
init_completion(&drv_data->handshake_completion);
@ -181,14 +185,14 @@ static void nfcmrvl_spi_remove(struct spi_device *spi)
nfcmrvl_nci_unregister_dev(drv_data->priv);
}
static const struct of_device_id of_nfcmrvl_spi_match[] __maybe_unused = {
{ .compatible = "marvell,nfc-spi", },
{},
static const struct of_device_id of_nfcmrvl_spi_match[] = {
{ .compatible = "marvell,nfc-spi" },
{ }
};
MODULE_DEVICE_TABLE(of, of_nfcmrvl_spi_match);
static const struct spi_device_id nfcmrvl_spi_id_table[] = {
{ "nfcmrvl_spi", 0 },
{ .name = "nfcmrvl_spi" },
{ }
};
MODULE_DEVICE_TABLE(spi, nfcmrvl_spi_id_table);

View File

@ -17,7 +17,6 @@ static struct usb_device_id nfcmrvl_table[] = {
USB_CLASS_VENDOR_SPEC, 4, 1) },
{ } /* Terminating entry */
};
MODULE_DEVICE_TABLE(usb, nfcmrvl_table);
#define NFCMRVL_USB_BULK_RUNNING 1

View File

@ -334,8 +334,10 @@ static int nxp_nci_i2c_probe(struct i2c_client *client)
nxp_nci_i2c_irq_thread_fn,
irqflags | IRQF_ONESHOT,
NXP_NCI_I2C_DRIVER_NAME, phy);
if (r < 0)
if (r < 0) {
nfc_err(&client->dev, "Unable to register IRQ handler\n");
nxp_nci_remove(phy->ndev);
}
return r;
}
@ -355,16 +357,16 @@ static const struct i2c_device_id nxp_nci_i2c_id_table[] = {
MODULE_DEVICE_TABLE(i2c, nxp_nci_i2c_id_table);
static const struct of_device_id of_nxp_nci_i2c_match[] = {
{ .compatible = "nxp,nxp-nci-i2c", },
{}
{ .compatible = "nxp,nxp-nci-i2c" },
{ }
};
MODULE_DEVICE_TABLE(of, of_nxp_nci_i2c_match);
#ifdef CONFIG_ACPI
static const struct acpi_device_id acpi_id[] = {
{ "NXP1001" },
{ "NXP1002" },
{ "NXP7471" },
{ .id = "NXP1001" },
{ .id = "NXP1002" },
{ .id = "NXP7471" },
{ }
};
MODULE_DEVICE_TABLE(acpi, acpi_id);

View File

@ -236,15 +236,15 @@ static void pn533_i2c_remove(struct i2c_client *client)
pn53x_common_clean(phy->priv);
}
static const struct of_device_id of_pn533_i2c_match[] __maybe_unused = {
{ .compatible = "nxp,pn532", },
static const struct of_device_id of_pn533_i2c_match[] = {
{ .compatible = "nxp,pn532" },
/*
* NOTE: The use of the compatibles with the trailing "...-i2c" is
* deprecated and will be removed.
*/
{ .compatible = "nxp,pn533-i2c", },
{ .compatible = "nxp,pn532-i2c", },
{},
{ .compatible = "nxp,pn533-i2c" },
{ .compatible = "nxp,pn532-i2c" },
{ }
};
MODULE_DEVICE_TABLE(of, of_pn533_i2c_match);

View File

@ -740,8 +740,10 @@ static int pn533_target_found_type_a(struct nfc_target *nfc_tgt, u8 *tgt_data,
struct pn533_target_felica {
u8 pol_res;
u8 opcode;
u8 nfcid2[NFC_NFCID2_MAXSIZE];
struct_group(sensf_res,
u8 opcode;
u8 nfcid2[NFC_NFCID2_MAXSIZE];
);
u8 pad[8];
/* optional */
u8 syst_code[];
@ -778,8 +780,8 @@ static int pn533_target_found_felica(struct nfc_target *nfc_tgt, u8 *tgt_data,
else
nfc_tgt->supported_protocols = NFC_PROTO_FELICA_MASK;
memcpy(nfc_tgt->sensf_res, &tgt_felica->opcode, 9);
nfc_tgt->sensf_res_len = 9;
memcpy(nfc_tgt->sensf_res, &tgt_felica->sensf_res, sizeof(tgt_felica->sensf_res));
nfc_tgt->sensf_res_len = sizeof(tgt_felica->sensf_res);
memcpy(nfc_tgt->nfcid2, tgt_felica->nfcid2, NFC_NFCID2_MAXSIZE);
nfc_tgt->nfcid2_len = NFC_NFCID2_MAXSIZE;

View File

@ -238,8 +238,8 @@ static const struct serdev_device_ops pn532_serdev_ops = {
};
static const struct of_device_id pn532_uart_of_match[] = {
{ .compatible = "nxp,pn532", },
{},
{ .compatible = "nxp,pn532" },
{ }
};
MODULE_DEVICE_TABLE(of, pn532_uart_of_match);

View File

@ -47,14 +47,12 @@ static const struct i2c_device_id pn544_hci_i2c_id_table[] = {
{ .name = "pn544" },
{ }
};
MODULE_DEVICE_TABLE(i2c, pn544_hci_i2c_id_table);
static const struct acpi_device_id pn544_hci_i2c_acpi_match[] __maybe_unused = {
{"NXP5440", 0},
{}
static const struct acpi_device_id pn544_hci_i2c_acpi_match[] = {
{ .id = "NXP5440" },
{ }
};
MODULE_DEVICE_TABLE(acpi, pn544_hci_i2c_acpi_match);
#define PN544_HCI_I2C_DRIVER_NAME "pn544_hci_i2c"
@ -939,9 +937,9 @@ static void pn544_hci_i2c_remove(struct i2c_client *client)
pn544_hci_i2c_disable(phy);
}
static const struct of_device_id of_pn544_i2c_match[] __maybe_unused = {
{ .compatible = "nxp,pn544-i2c", },
{},
static const struct of_device_id of_pn544_i2c_match[] = {
{ .compatible = "nxp,pn544-i2c" },
{ }
};
MODULE_DEVICE_TABLE(of, of_pn544_i2c_match);

View File

@ -47,10 +47,12 @@ static void pn544_mei_remove(struct mei_cl_device *cldev)
}
static struct mei_cl_device_id pn544_mei_tbl[] = {
{ PN544_DRIVER_NAME, MEI_NFC_UUID, MEI_CL_VERSION_ANY},
/* required last entry */
{ }
{
.name = PN544_DRIVER_NAME,
.uuid = MEI_NFC_UUID,
.version = MEI_CL_VERSION_ANY,
},
{ /* required last entry */ }
};
MODULE_DEVICE_TABLE(mei, pn544_mei_tbl);

View File

@ -1480,8 +1480,8 @@ static const struct nfc_digital_ops port100_digital_ops = {
};
static const struct usb_device_id port100_table[] = {
{ USB_DEVICE(SONY_VENDOR_ID, RCS380S_PRODUCT_ID), },
{ USB_DEVICE(SONY_VENDOR_ID, RCS380P_PRODUCT_ID), },
{ USB_DEVICE(SONY_VENDOR_ID, RCS380S_PRODUCT_ID) },
{ USB_DEVICE(SONY_VENDOR_ID, RCS380P_PRODUCT_ID) },
{ }
};
MODULE_DEVICE_TABLE(usb, port100_table);

View File

@ -210,9 +210,9 @@ static const struct i2c_device_id s3fwrn5_i2c_id_table[] = {
};
MODULE_DEVICE_TABLE(i2c, s3fwrn5_i2c_id_table);
static const struct of_device_id of_s3fwrn5_i2c_match[] __maybe_unused = {
{ .compatible = "samsung,s3fwrn5-i2c", },
{}
static const struct of_device_id of_s3fwrn5_i2c_match[] = {
{ .compatible = "samsung,s3fwrn5-i2c" },
{ }
};
MODULE_DEVICE_TABLE(of, of_s3fwrn5_i2c_match);

View File

@ -85,8 +85,8 @@ static const struct serdev_device_ops s3fwrn82_serdev_ops = {
};
static const struct of_device_id s3fwrn82_uart_of_match[] = {
{ .compatible = "samsung,s3fwrn82", },
{},
{ .compatible = "samsung,s3fwrn82" },
{ }
};
MODULE_DEVICE_TABLE(of, s3fwrn82_uart_of_match);

View File

@ -262,18 +262,18 @@ static const struct i2c_device_id st_nci_i2c_id_table[] = {
};
MODULE_DEVICE_TABLE(i2c, st_nci_i2c_id_table);
static const struct acpi_device_id st_nci_i2c_acpi_match[] __maybe_unused = {
{"SMO2101"},
{"SMO2102"},
{}
static const struct acpi_device_id st_nci_i2c_acpi_match[] = {
{ .id = "SMO2101" },
{ .id = "SMO2102" },
{ }
};
MODULE_DEVICE_TABLE(acpi, st_nci_i2c_acpi_match);
static const struct of_device_id of_st_nci_i2c_match[] __maybe_unused = {
{ .compatible = "st,st21nfcb-i2c", },
{ .compatible = "st,st21nfcb_i2c", },
{ .compatible = "st,st21nfcc-i2c", },
{}
static const struct of_device_id of_st_nci_i2c_match[] = {
{ .compatible = "st,st21nfcb-i2c" },
{ .compatible = "st,st21nfcb_i2c" },
{ .compatible = "st,st21nfcc-i2c" },
{ }
};
MODULE_DEVICE_TABLE(of, of_st_nci_i2c_match);

View File

@ -271,21 +271,21 @@ static void st_nci_spi_remove(struct spi_device *dev)
}
static struct spi_device_id st_nci_spi_id_table[] = {
{ST_NCI_SPI_DRIVER_NAME, 0},
{"st21nfcb-spi", 0},
{}
{ .name = ST_NCI_SPI_DRIVER_NAME },
{ .name = "st21nfcb-spi" },
{ }
};
MODULE_DEVICE_TABLE(spi, st_nci_spi_id_table);
static const struct acpi_device_id st_nci_spi_acpi_match[] __maybe_unused = {
{"SMO2101", 0},
{}
static const struct acpi_device_id st_nci_spi_acpi_match[] = {
{ .id = "SMO2101" },
{ }
};
MODULE_DEVICE_TABLE(acpi, st_nci_spi_acpi_match);
static const struct of_device_id of_st_nci_spi_match[] __maybe_unused = {
{ .compatible = "st,st21nfcb-spi", },
{}
static const struct of_device_id of_st_nci_spi_match[] = {
{ .compatible = "st,st21nfcb-spi" },
{ }
};
MODULE_DEVICE_TABLE(of, of_st_nci_spi_match);

View File

@ -577,16 +577,16 @@ static const struct i2c_device_id st21nfca_hci_i2c_id_table[] = {
};
MODULE_DEVICE_TABLE(i2c, st21nfca_hci_i2c_id_table);
static const struct acpi_device_id st21nfca_hci_i2c_acpi_match[] __maybe_unused = {
{"SMO2100", 0},
{}
static const struct acpi_device_id st21nfca_hci_i2c_acpi_match[] = {
{ .id = "SMO2100" },
{ }
};
MODULE_DEVICE_TABLE(acpi, st21nfca_hci_i2c_acpi_match);
static const struct of_device_id of_st21nfca_i2c_match[] __maybe_unused = {
{ .compatible = "st,st21nfca-i2c", },
{ .compatible = "st,st21nfca_i2c", },
{}
static const struct of_device_id of_st21nfca_i2c_match[] = {
{ .compatible = "st,st21nfca-i2c" },
{ .compatible = "st,st21nfca_i2c" },
{ }
};
MODULE_DEVICE_TABLE(of, of_st21nfca_i2c_match);

View File

@ -450,19 +450,19 @@ static int st95hf_select_protocol(struct st95hf_context *stcontext, int type)
static void st95hf_send_st95enable_negativepulse(struct st95hf_context *st95con)
{
/* First make irq_in pin high */
gpiod_set_value(st95con->enable_gpiod, HIGH);
gpiod_set_value_cansleep(st95con->enable_gpiod, HIGH);
/* wait for 1 milisecond */
usleep_range(1000, 2000);
/* Make irq_in pin low */
gpiod_set_value(st95con->enable_gpiod, LOW);
gpiod_set_value_cansleep(st95con->enable_gpiod, LOW);
/* wait for minimum interrupt pulse to make st95 active */
usleep_range(1000, 2000);
/* At end make it high */
gpiod_set_value(st95con->enable_gpiod, HIGH);
gpiod_set_value_cansleep(st95con->enable_gpiod, HIGH);
}
/*
@ -1049,14 +1049,14 @@ static const struct nfc_digital_ops st95hf_nfc_digital_ops = {
};
static const struct spi_device_id st95hf_id[] = {
{ "st95hf", 0 },
{}
{ .name = "st95hf" },
{ }
};
MODULE_DEVICE_TABLE(spi, st95hf_id);
static const struct of_device_id st95hf_spi_of_match[] __maybe_unused = {
static const struct of_device_id st95hf_spi_of_match[] = {
{ .compatible = "st,st95hf" },
{},
{ }
};
MODULE_DEVICE_TABLE(of, st95hf_spi_of_match);

View File

@ -938,7 +938,7 @@ static irqreturn_t trf7970a_irq(int irq, void *dev_id)
if (!trf->timeout) {
trf->ignore_timeout =
!cancel_delayed_work(&trf->timeout_work);
trf->rx_skb = ERR_PTR(0);
trf->rx_skb = NULL;
trf7970a_send_upstream(trf);
break;
}
@ -2303,18 +2303,16 @@ static const struct dev_pm_ops trf7970a_pm_ops = {
trf7970a_pm_runtime_resume, NULL)
};
static const struct of_device_id trf7970a_of_match[] __maybe_unused = {
{.compatible = "ti,trf7970a",},
{},
static const struct of_device_id trf7970a_of_match[] = {
{ .compatible = "ti,trf7970a" },
{ }
};
MODULE_DEVICE_TABLE(of, trf7970a_of_match);
static const struct spi_device_id trf7970a_id_table[] = {
{"trf7970a", 0},
{}
{ .name = "trf7970a" },
{ }
};
MODULE_DEVICE_TABLE(spi, trf7970a_id_table);
static struct spi_driver trf7970a_spi_driver = {