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: Vincent Cuissard <cuissard@marvell.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:
parent
3194c68701
commit
58d34aa677
|
@ -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,
|
||||||
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,
|
||||||
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,
|
||||||
| 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 {
|
||||||
|
|
||||||
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)
|
||||||
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,
|
||||||
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;
|
||||||
|
|
Loading…
Reference in New Issue