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

Commit 0e2e8777 authored by Alexandre Belloni's avatar Alexandre Belloni
Browse files

rtc: pcf85063: differentiate pcf85063a and pcf85063tp



As stated in a comment pcf85063a and pcf85063tp don't have the same number
of registers. Especially, pcf85063tp doesn't have alarm support.

Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@bootlin.com>
parent e89b60d0
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
* NXP PCF85063 Real Time Clock

Required properties:
- compatible: Should contain "nxp,pcf85063".
- compatible: Should one of contain:
	"nxp,pcf85063",
	"nxp,pcf85063a",
	"nxp,pcf85063tp"
- reg: I2C address for chip.

Optional property:
+27 −6
Original line number Diff line number Diff line
@@ -30,6 +30,10 @@
#define PCF85063_REG_SC			0x04 /* datetime */
#define PCF85063_REG_SC_OS		0x80

struct pcf85063_config {
	struct regmap_config regmap;
};

struct pcf85063 {
	struct rtc_device	*rtc;
	struct regmap		*regmap;
@@ -147,10 +151,20 @@ static int pcf85063_load_capacitance(struct pcf85063 *pcf85063,
				  PCF85063_REG_CTRL1_CAP_SEL, reg);
}

static const struct regmap_config regmap_config = {
static const struct pcf85063_config pcf85063a_config = {
	.regmap = {
		.reg_bits = 8,
		.val_bits = 8,
		.max_register = 0x11,
	},
};

static const struct pcf85063_config pcf85063tp_config = {
	.regmap = {
		.reg_bits = 8,
		.val_bits = 8,
		.max_register = 0x0a,
	},
};

static int pcf85063_probe(struct i2c_client *client)
@@ -158,6 +172,8 @@ static int pcf85063_probe(struct i2c_client *client)
	struct pcf85063 *pcf85063;
	unsigned int tmp;
	int err;
	const struct pcf85063_config *config = &pcf85063tp_config;
	const void *data = of_device_get_match_data(&client->dev);

	dev_dbg(&client->dev, "%s\n", __func__);

@@ -166,7 +182,10 @@ static int pcf85063_probe(struct i2c_client *client)
	if (!pcf85063)
		return -ENOMEM;

	pcf85063->regmap = devm_regmap_init_i2c(client, &regmap_config);
	if (data)
		config = data;

	pcf85063->regmap = devm_regmap_init_i2c(client, &config->regmap);
	if (IS_ERR(pcf85063->regmap))
		return PTR_ERR(pcf85063->regmap);

@@ -196,7 +215,9 @@ static int pcf85063_probe(struct i2c_client *client)

#ifdef CONFIG_OF
static const struct of_device_id pcf85063_of_match[] = {
	{ .compatible = "nxp,pcf85063" },
	{ .compatible = "nxp,pcf85063", .data = &pcf85063tp_config },
	{ .compatible = "nxp,pcf85063tp", .data = &pcf85063tp_config },
	{ .compatible = "nxp,pcf85063a", .data = &pcf85063a_config },
	{}
};
MODULE_DEVICE_TABLE(of, pcf85063_of_match);