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

Commit 0848c94f authored by Mark Brown's avatar Mark Brown Committed by Samuel Ortiz
Browse files

mfd: core: Push irqdomain mapping out into devices



Currently the MFD core supports remapping MFD cell interrupts using an
irqdomain but only if the MFD is being instantiated using device tree
and only if the device tree bindings use the pattern of registering IPs
in the device tree with compatible properties.  This will be actively
harmful for drivers which support non-DT platforms and use this pattern
for their DT bindings as it will mean that the core will silently change
remapping behaviour and it is also limiting for drivers which don't do
DT with this particular pattern.  There is also a potential fragility if
there are interrupts not associated with MFD cells and all the cells are
omitted from the device tree for some reason.

Instead change the code to take an IRQ domain as an optional argument,
allowing drivers to take the decision about the parent domain for their
interrupts.  The one current user of this feature is ab8500-core, it has
the domain lookup pushed out into the driver.

Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: default avatarSamuel Ortiz <sameo@linux.intel.com>
parent a0e35322
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -470,7 +470,8 @@ static int __devinit device_800_init(struct pm80x_chip *chip,

	ret =
	    mfd_add_devices(chip->dev, 0, &onkey_devs[0],
			    ARRAY_SIZE(onkey_devs), &onkey_resources[0], 0);
			    ARRAY_SIZE(onkey_devs), &onkey_resources[0], 0,
			    NULL);
	if (ret < 0) {
		dev_err(chip->dev, "Failed to add onkey subdev\n");
		goto out_dev;
@@ -481,7 +482,7 @@ static int __devinit device_800_init(struct pm80x_chip *chip,
		rtc_devs[0].platform_data = pdata->rtc;
		rtc_devs[0].pdata_size = sizeof(struct pm80x_rtc_pdata);
		ret = mfd_add_devices(chip->dev, 0, &rtc_devs[0],
				      ARRAY_SIZE(rtc_devs), NULL, 0);
				      ARRAY_SIZE(rtc_devs), NULL, 0, NULL);
		if (ret < 0) {
			dev_err(chip->dev, "Failed to add rtc subdev\n");
			goto out_dev;
+2 −1
Original line number Diff line number Diff line
@@ -216,7 +216,8 @@ static int __devinit device_805_init(struct pm80x_chip *chip)
	}

	ret = mfd_add_devices(chip->dev, 0, &codec_devs[0],
			      ARRAY_SIZE(codec_devs), &codec_resources[0], 0);
			      ARRAY_SIZE(codec_devs), &codec_resources[0], 0,
			      NULL);
	if (ret < 0) {
		dev_err(chip->dev, "Failed to add codec subdev\n");
		goto out_codec;
+11 −10
Original line number Diff line number Diff line
@@ -637,7 +637,7 @@ static void __devinit device_bk_init(struct pm860x_chip *chip,
			bk_devs[i].resources = &bk_resources[j];
			ret = mfd_add_devices(chip->dev, 0,
					      &bk_devs[i], 1,
					      &bk_resources[j], 0);
					      &bk_resources[j], 0, NULL);
			if (ret < 0) {
				dev_err(chip->dev, "Failed to add "
					"backlight subdev\n");
@@ -672,7 +672,7 @@ static void __devinit device_led_init(struct pm860x_chip *chip,
			led_devs[i].resources = &led_resources[j],
			ret = mfd_add_devices(chip->dev, 0,
					      &led_devs[i], 1,
					      &led_resources[j], 0);
					      &led_resources[j], 0, NULL);
			if (ret < 0) {
				dev_err(chip->dev, "Failed to add "
					"led subdev\n");
@@ -709,7 +709,7 @@ static void __devinit device_regulator_init(struct pm860x_chip *chip,
		regulator_devs[i].resources = &regulator_resources[seq];

		ret = mfd_add_devices(chip->dev, 0, &regulator_devs[i], 1,
				      &regulator_resources[seq], 0);
				      &regulator_resources[seq], 0, NULL);
		if (ret < 0) {
			dev_err(chip->dev, "Failed to add regulator subdev\n");
			goto out;
@@ -733,7 +733,7 @@ static void __devinit device_rtc_init(struct pm860x_chip *chip,
	rtc_devs[0].resources = &rtc_resources[0];
	ret = mfd_add_devices(chip->dev, 0, &rtc_devs[0],
			      ARRAY_SIZE(rtc_devs), &rtc_resources[0],
			      chip->irq_base);
			      chip->irq_base, NULL);
	if (ret < 0)
		dev_err(chip->dev, "Failed to add rtc subdev\n");
}
@@ -752,7 +752,7 @@ static void __devinit device_touch_init(struct pm860x_chip *chip,
	touch_devs[0].resources = &touch_resources[0];
	ret = mfd_add_devices(chip->dev, 0, &touch_devs[0],
			      ARRAY_SIZE(touch_devs), &touch_resources[0],
			      chip->irq_base);
			      chip->irq_base, NULL);
	if (ret < 0)
		dev_err(chip->dev, "Failed to add touch subdev\n");
}
@@ -770,7 +770,7 @@ static void __devinit device_power_init(struct pm860x_chip *chip,
	power_devs[0].num_resources = ARRAY_SIZE(battery_resources);
	power_devs[0].resources = &battery_resources[0],
	ret = mfd_add_devices(chip->dev, 0, &power_devs[0], 1,
			      &battery_resources[0], chip->irq_base);
			      &battery_resources[0], chip->irq_base, NULL);
	if (ret < 0)
		dev_err(chip->dev, "Failed to add battery subdev\n");

@@ -779,7 +779,7 @@ static void __devinit device_power_init(struct pm860x_chip *chip,
	power_devs[1].num_resources = ARRAY_SIZE(charger_resources);
	power_devs[1].resources = &charger_resources[0],
	ret = mfd_add_devices(chip->dev, 0, &power_devs[1], 1,
			      &charger_resources[0], chip->irq_base);
			      &charger_resources[0], chip->irq_base, NULL);
	if (ret < 0)
		dev_err(chip->dev, "Failed to add charger subdev\n");

@@ -788,7 +788,7 @@ static void __devinit device_power_init(struct pm860x_chip *chip,
	power_devs[2].num_resources = ARRAY_SIZE(preg_resources);
	power_devs[2].resources = &preg_resources[0],
	ret = mfd_add_devices(chip->dev, 0, &power_devs[2], 1,
			      &preg_resources[0], chip->irq_base);
			      &preg_resources[0], chip->irq_base, NULL);
	if (ret < 0)
		dev_err(chip->dev, "Failed to add preg subdev\n");
}
@@ -802,7 +802,7 @@ static void __devinit device_onkey_init(struct pm860x_chip *chip,
	onkey_devs[0].resources = &onkey_resources[0],
	ret = mfd_add_devices(chip->dev, 0, &onkey_devs[0],
			      ARRAY_SIZE(onkey_devs), &onkey_resources[0],
			      chip->irq_base);
			      chip->irq_base, NULL);
	if (ret < 0)
		dev_err(chip->dev, "Failed to add onkey subdev\n");
}
@@ -815,7 +815,8 @@ static void __devinit device_codec_init(struct pm860x_chip *chip,
	codec_devs[0].num_resources = ARRAY_SIZE(codec_resources);
	codec_devs[0].resources = &codec_resources[0],
	ret = mfd_add_devices(chip->dev, 0, &codec_devs[0],
			      ARRAY_SIZE(codec_devs), &codec_resources[0], 0);
			      ARRAY_SIZE(codec_devs), &codec_resources[0], 0,
			      NULL);
	if (ret < 0)
		dev_err(chip->dev, "Failed to add codec subdev\n");
}
+1 −1
Original line number Diff line number Diff line
@@ -424,7 +424,7 @@ static int aat2870_i2c_probe(struct i2c_client *client,
	}

	ret = mfd_add_devices(aat2870->dev, 0, aat2870_devs,
			      ARRAY_SIZE(aat2870_devs), NULL, 0);
			      ARRAY_SIZE(aat2870_devs), NULL, 0, NULL);
	if (ret != 0) {
		dev_err(aat2870->dev, "Failed to add subdev: %d\n", ret);
		goto out_disable;
+1 −1
Original line number Diff line number Diff line
@@ -946,7 +946,7 @@ static int __devinit ab3100_probe(struct i2c_client *client,
	}

	err = mfd_add_devices(&client->dev, 0, ab3100_devs,
		ARRAY_SIZE(ab3100_devs), NULL, 0);
			      ARRAY_SIZE(ab3100_devs), NULL, 0, NULL);

	ab3100_setup_debugfs(ab3100);

Loading