Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 60d9edd5 authored by Samuel Ortiz's avatar Samuel Ortiz
Browse files

NFC: pn533: Turn radio on and off when bringing the device up and down

parent 7757dc8a
Loading
Loading
Loading
Loading
+35 −4
Original line number Diff line number Diff line
@@ -163,10 +163,14 @@ struct pn533_fw_version {
};

/* PN533_CMD_RF_CONFIGURATION */
#define PN533_CFGITEM_RF_FIELD    0x01
#define PN533_CFGITEM_TIMING      0x02
#define PN533_CFGITEM_MAX_RETRIES 0x05
#define PN533_CFGITEM_PASORI      0x82

#define PN533_CFGITEM_RF_FIELD_ON  0x1
#define PN533_CFGITEM_RF_FIELD_OFF 0x0

#define PN533_CONFIG_TIMING_102 0xb
#define PN533_CONFIG_TIMING_204 0xc
#define PN533_CONFIG_TIMING_409 0xd
@@ -2540,9 +2544,36 @@ static int pn533_acr122_poweron_rdr(struct pn533 *dev)
	return arg.rc;
}

static int pn533_rf_field(struct nfc_dev *nfc_dev, u8 rf)
{
	struct pn533 *dev = nfc_get_drvdata(nfc_dev);
	u8 rf_field = !!rf;
	int rc;

	rc = pn533_set_configuration(dev, PN533_CFGITEM_RF_FIELD,
				     (u8 *)&rf_field, 1);
	if (rc) {
		nfc_dev_err(&dev->interface->dev,
			    "Error on setting RF field");
		return rc;
	}

	return rc;
}

int pn533_dev_up(struct nfc_dev *nfc_dev)
{
	return pn533_rf_field(nfc_dev, 1);
}

int pn533_dev_down(struct nfc_dev *nfc_dev)
{
	return pn533_rf_field(nfc_dev, 0);
}

static struct nfc_ops pn533_nfc_ops = {
	.dev_up = NULL,
	.dev_down = NULL,
	.dev_up = pn533_dev_up,
	.dev_down = pn533_dev_down,
	.dep_link_up = pn533_dep_link_up,
	.dep_link_down = pn533_dep_link_down,
	.start_poll = pn533_start_poll,