Commit 58d34aa6 authored by Vincent Cuissard's avatar Vincent Cuissard Committed by Samuel Ortiz

NFC: nfcmrvl: configure head/tail room values per low level drivers

Low-level drivers may need to add some data before and/or
after NCI packet.
Signed-off-by: default avatarVincent Cuissard <cuissard@marvell.com>
Signed-off-by: default avatarSamuel Ortiz <sameo@linux.intel.com>
parent 3194c687
...@@ -97,14 +97,16 @@ static struct nci_ops nfcmrvl_nci_ops = { ...@@ -97,14 +97,16 @@ static struct nci_ops nfcmrvl_nci_ops = {
.fw_download = nfcmrvl_nci_fw_download, .fw_download = nfcmrvl_nci_fw_download,
}; };
struct nfcmrvl_private *nfcmrvl_nci_register_dev(void *drv_data, struct nfcmrvl_private *nfcmrvl_nci_register_dev(enum nfcmrvl_phy phy,
void *drv_data,
struct nfcmrvl_if_ops *ops, struct nfcmrvl_if_ops *ops,
struct device *dev, struct device *dev,
struct nfcmrvl_platform_data *pdata) struct nfcmrvl_platform_data *pdata)
{ {
struct nfcmrvl_private *priv; struct nfcmrvl_private *priv;
int rc; int rc;
int headroom = 0; int headroom;
int tailroom;
u32 protocols; u32 protocols;
priv = kzalloc(sizeof(*priv), GFP_KERNEL); priv = kzalloc(sizeof(*priv), GFP_KERNEL);
...@@ -114,6 +116,7 @@ struct nfcmrvl_private *nfcmrvl_nci_register_dev(void *drv_data, ...@@ -114,6 +116,7 @@ struct nfcmrvl_private *nfcmrvl_nci_register_dev(void *drv_data,
priv->drv_data = drv_data; priv->drv_data = drv_data;
priv->if_ops = ops; priv->if_ops = ops;
priv->dev = dev; priv->dev = dev;
priv->phy = phy;
memcpy(&priv->config, pdata, sizeof(*pdata)); memcpy(&priv->config, pdata, sizeof(*pdata));
...@@ -126,8 +129,10 @@ struct nfcmrvl_private *nfcmrvl_nci_register_dev(void *drv_data, ...@@ -126,8 +129,10 @@ struct nfcmrvl_private *nfcmrvl_nci_register_dev(void *drv_data,
nfc_err(dev, "failed to request reset_n io\n"); nfc_err(dev, "failed to request reset_n io\n");
} }
headroom = tailroom = 0;
if (priv->config.hci_muxed) if (priv->config.hci_muxed)
headroom = NFCMRVL_HCI_EVENT_HEADER_SIZE; headroom += NFCMRVL_HCI_EVENT_HEADER_SIZE;
protocols = NFC_PROTO_JEWEL_MASK protocols = NFC_PROTO_JEWEL_MASK
| NFC_PROTO_MIFARE_MASK | NFC_PROTO_MIFARE_MASK
...@@ -138,7 +143,7 @@ struct nfcmrvl_private *nfcmrvl_nci_register_dev(void *drv_data, ...@@ -138,7 +143,7 @@ struct nfcmrvl_private *nfcmrvl_nci_register_dev(void *drv_data,
| NFC_PROTO_NFC_DEP_MASK; | NFC_PROTO_NFC_DEP_MASK;
priv->ndev = nci_allocate_device(&nfcmrvl_nci_ops, protocols, priv->ndev = nci_allocate_device(&nfcmrvl_nci_ops, protocols,
headroom, 0); headroom, tailroom);
if (!priv->ndev) { if (!priv->ndev) {
nfc_err(dev, "nci_allocate_device failed\n"); nfc_err(dev, "nci_allocate_device failed\n");
rc = -ENOMEM; rc = -ENOMEM;
......
...@@ -100,7 +100,8 @@ struct nfcmrvl_if_ops { ...@@ -100,7 +100,8 @@ struct nfcmrvl_if_ops {
void nfcmrvl_nci_unregister_dev(struct nfcmrvl_private *priv); void nfcmrvl_nci_unregister_dev(struct nfcmrvl_private *priv);
int nfcmrvl_nci_recv_frame(struct nfcmrvl_private *priv, struct sk_buff *skb); int nfcmrvl_nci_recv_frame(struct nfcmrvl_private *priv, struct sk_buff *skb);
struct nfcmrvl_private *nfcmrvl_nci_register_dev(void *drv_data, struct nfcmrvl_private *nfcmrvl_nci_register_dev(enum nfcmrvl_phy phy,
void *drv_data,
struct nfcmrvl_if_ops *ops, struct nfcmrvl_if_ops *ops,
struct device *dev, struct device *dev,
struct nfcmrvl_platform_data *pdata); struct nfcmrvl_platform_data *pdata);
......
...@@ -138,11 +138,11 @@ static int nfcmrvl_nci_uart_open(struct nci_uart *nu) ...@@ -138,11 +138,11 @@ static int nfcmrvl_nci_uart_open(struct nci_uart *nu)
pdata = &config; pdata = &config;
} }
priv = nfcmrvl_nci_register_dev(nu, &uart_ops, nu->tty->dev, pdata); priv = nfcmrvl_nci_register_dev(NFCMRVL_PHY_UART, nu, &uart_ops,
nu->tty->dev, pdata);
if (IS_ERR(priv)) if (IS_ERR(priv))
return PTR_ERR(priv); return PTR_ERR(priv);
priv->phy = NFCMRVL_PHY_UART;
priv->support_fw_dnld = true; priv->support_fw_dnld = true;
nu->drv_data = priv; nu->drv_data = priv;
......
...@@ -340,13 +340,12 @@ static int nfcmrvl_probe(struct usb_interface *intf, ...@@ -340,13 +340,12 @@ static int nfcmrvl_probe(struct usb_interface *intf,
init_usb_anchor(&drv_data->bulk_anchor); init_usb_anchor(&drv_data->bulk_anchor);
init_usb_anchor(&drv_data->deferred); init_usb_anchor(&drv_data->deferred);
priv = nfcmrvl_nci_register_dev(drv_data, &usb_ops, priv = nfcmrvl_nci_register_dev(NFCMRVL_PHY_USB, drv_data, &usb_ops,
&drv_data->udev->dev, &config); &drv_data->udev->dev, &config);
if (IS_ERR(priv)) if (IS_ERR(priv))
return PTR_ERR(priv); return PTR_ERR(priv);
drv_data->priv = priv; drv_data->priv = priv;
drv_data->priv->phy = NFCMRVL_PHY_USB;
drv_data->priv->support_fw_dnld = false; drv_data->priv->support_fw_dnld = false;
priv->dev = &drv_data->udev->dev; priv->dev = &drv_data->udev->dev;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment