Commit 91569692 authored by Lee Jones's avatar Lee Jones
Browse files

mfd: pm8008: Remove driver data structure pm8008_data



Maintaining a local driver data structure that is never shared
outside of the core device is an unnecessary complexity.  Half of the
attributes were not used outside of a single function, one of which
was not used at all.  The remaining 2 are generic and can be passed
around as required.

Signed-off-by: default avatarLee Jones <lee.jones@linaro.org>
parent 4a346a03
Loading
Loading
Loading
Loading
+20 −33
Original line number Diff line number Diff line
@@ -54,13 +54,6 @@ enum {

#define PM8008_PERIPH_OFFSET(paddr)	(paddr - PM8008_PERIPH_0_BASE)

struct pm8008_data {
	struct device *dev;
	struct regmap *regmap;
	int irq;
	struct regmap_irq_chip_data *irq_data;
};

static unsigned int p0_offs[] = {PM8008_PERIPH_OFFSET(PM8008_PERIPH_0_BASE)};
static unsigned int p1_offs[] = {PM8008_PERIPH_OFFSET(PM8008_PERIPH_1_BASE)};
static unsigned int p2_offs[] = {PM8008_PERIPH_OFFSET(PM8008_PERIPH_2_BASE)};
@@ -150,7 +143,7 @@ static struct regmap_config qcom_mfd_regmap_cfg = {
	.max_register	= 0xFFFF,
};

static int pm8008_init(struct pm8008_data *chip)
static int pm8008_init(struct regmap *regmap)
{
	int rc;

@@ -160,34 +153,31 @@ static int pm8008_init(struct pm8008_data *chip)
	 * This is required to enable the writing of TYPE registers in
	 * regmap_irq_sync_unlock().
	 */
	rc = regmap_write(chip->regmap,
			 (PM8008_TEMP_ALARM_ADDR | INT_SET_TYPE_OFFSET),
			 BIT(0));
	rc = regmap_write(regmap, (PM8008_TEMP_ALARM_ADDR | INT_SET_TYPE_OFFSET), BIT(0));
	if (rc)
		return rc;

	/* Do the same for GPIO1 and GPIO2 peripherals */
	rc = regmap_write(chip->regmap,
			 (PM8008_GPIO1_ADDR | INT_SET_TYPE_OFFSET), BIT(0));
	rc = regmap_write(regmap, (PM8008_GPIO1_ADDR | INT_SET_TYPE_OFFSET), BIT(0));
	if (rc)
		return rc;

	rc = regmap_write(chip->regmap,
			 (PM8008_GPIO2_ADDR | INT_SET_TYPE_OFFSET), BIT(0));
	rc = regmap_write(regmap, (PM8008_GPIO2_ADDR | INT_SET_TYPE_OFFSET), BIT(0));

	return rc;
}

static int pm8008_probe_irq_peripherals(struct pm8008_data *chip,
static int pm8008_probe_irq_peripherals(struct device *dev,
					struct regmap *regmap,
					int client_irq)
{
	int rc, i;
	struct regmap_irq_type *type;
	struct regmap_irq_chip_data *irq_data;

	rc = pm8008_init(chip);
	rc = pm8008_init(regmap);
	if (rc) {
		dev_err(chip->dev, "Init failed: %d\n", rc);
		dev_err(dev, "Init failed: %d\n", rc);
		return rc;
	}

@@ -207,10 +197,10 @@ static int pm8008_probe_irq_peripherals(struct pm8008_data *chip,
				IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_LEVEL_LOW);
	}

	rc = devm_regmap_add_irq_chip(chip->dev, chip->regmap, client_irq,
	rc = devm_regmap_add_irq_chip(dev, regmap, client_irq,
			IRQF_SHARED, 0, &pm8008_irq_chip, &irq_data);
	if (rc) {
		dev_err(chip->dev, "Failed to add IRQ chip: %d\n", rc);
		dev_err(dev, "Failed to add IRQ chip: %d\n", rc);
		return rc;
	}

@@ -220,26 +210,23 @@ static int pm8008_probe_irq_peripherals(struct pm8008_data *chip,
static int pm8008_probe(struct i2c_client *client)
{
	int rc;
	struct pm8008_data *chip;

	chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL);
	if (!chip)
		return -ENOMEM;
	struct device *dev;
	struct regmap *regmap;

	chip->dev = &client->dev;
	chip->regmap = devm_regmap_init_i2c(client, &qcom_mfd_regmap_cfg);
	if (!chip->regmap)
	dev = &client->dev;
	regmap = devm_regmap_init_i2c(client, &qcom_mfd_regmap_cfg);
	if (!regmap)
		return -ENODEV;

	i2c_set_clientdata(client, chip);
	i2c_set_clientdata(client, regmap);

	if (of_property_read_bool(chip->dev->of_node, "interrupt-controller")) {
		rc = pm8008_probe_irq_peripherals(chip, client->irq);
	if (of_property_read_bool(dev->of_node, "interrupt-controller")) {
		rc = pm8008_probe_irq_peripherals(dev, regmap, client->irq);
		if (rc)
			dev_err(chip->dev, "Failed to probe irq periphs: %d\n", rc);
			dev_err(dev, "Failed to probe irq periphs: %d\n", rc);
	}

	return devm_of_platform_populate(chip->dev);
	return devm_of_platform_populate(dev);
}

static const struct of_device_id pm8008_match[] = {