diff options
| -rw-r--r-- | drivers/mfd/qcom-pm8008.c | 53 | 
1 files changed, 20 insertions, 33 deletions
diff --git a/drivers/mfd/qcom-pm8008.c b/drivers/mfd/qcom-pm8008.c index c472d7f8103c..4b8ff947762f 100644 --- a/drivers/mfd/qcom-pm8008.c +++ b/drivers/mfd/qcom-pm8008.c @@ -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[] = {  | 
