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

Commit e7a6bb9a authored by Olof Johansson's avatar Olof Johansson
Browse files

Merge tag 'reset-for-4.8' of git://git.pengutronix.de/git/pza/linux into next/drivers

Reset controller changes for v4.8

- add devm_reset_controller_register API to get rid of a good
  amount of boilerplate across reset drivers.
- move reset controller Kconfig options into a sub-menu
- fix inconsistent return values, let all reset_control_get
  stubs return -ENOTSUPP

* tag 'reset-for-4.8' of git://git.pengutronix.de/git/pza/linux

:
  reset: Return -ENOTSUPP when not configured
  reset: oxnas: Use devm register API and get rid of platform remove
  reset: fix Kconfig menu to include reset drivers in sub-menu
  reset: zynq: use devm_reset_controller_register()
  reset: socfpga: use devm_reset_controller_register()
  reset: sunxi: use devm_reset_controller_register()
  reset: pistachio: use devm_reset_controller_register()
  reset: ath79: use devm_reset_controller_register()
  reset: add devm_reset_controller_register API

Signed-off-by: default avatarOlof Johansson <olof@lixom.net>
parents 1a695a90 168d7c4e
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -352,6 +352,10 @@ REGULATOR
  devm_regulator_put()
  devm_regulator_register()

RESET
  devm_reset_control_get()
  devm_reset_controller_register()

SLAVE DMA ENGINE
  devm_acpi_dma_controller_register()

+4 −0
Original line number Diff line number Diff line
@@ -12,8 +12,12 @@ menuconfig RESET_CONTROLLER

	  If unsure, say no.

if RESET_CONTROLLER

config RESET_OXNAS
	bool

source "drivers/reset/sti/Kconfig"
source "drivers/reset/hisilicon/Kconfig"

endif
+37 −0
Original line number Diff line number Diff line
@@ -93,6 +93,43 @@ void reset_controller_unregister(struct reset_controller_dev *rcdev)
}
EXPORT_SYMBOL_GPL(reset_controller_unregister);

static void devm_reset_controller_release(struct device *dev, void *res)
{
	reset_controller_unregister(*(struct reset_controller_dev **)res);
}

/**
 * devm_reset_controller_register - resource managed reset_controller_register()
 * @dev: device that is registering this reset controller
 * @rcdev: a pointer to the initialized reset controller device
 *
 * Managed reset_controller_register(). For reset controllers registered by
 * this function, reset_controller_unregister() is automatically called on
 * driver detach. See reset_controller_register() for more information.
 */
int devm_reset_controller_register(struct device *dev,
				   struct reset_controller_dev *rcdev)
{
	struct reset_controller_dev **rcdevp;
	int ret;

	rcdevp = devres_alloc(devm_reset_controller_release, sizeof(*rcdevp),
			      GFP_KERNEL);
	if (!rcdevp)
		return -ENOMEM;

	ret = reset_controller_register(rcdev);
	if (!ret) {
		*rcdevp = rcdev;
		devres_add(dev, rcdevp);
	} else {
		devres_free(rcdevp);
	}

	return ret;
}
EXPORT_SYMBOL_GPL(devm_reset_controller_register);

/**
 * reset_control_reset - reset the controlled device
 * @rstc: reset controller
+1 −2
Original line number Diff line number Diff line
@@ -112,7 +112,7 @@ static int ath79_reset_probe(struct platform_device *pdev)
	ath79_reset->rcdev.of_reset_n_cells = 1;
	ath79_reset->rcdev.nr_resets = 32;

	err = reset_controller_register(&ath79_reset->rcdev);
	err = devm_reset_controller_register(&pdev->dev, &ath79_reset->rcdev);
	if (err)
		return err;

@@ -131,7 +131,6 @@ static int ath79_reset_remove(struct platform_device *pdev)
	struct ath79_reset *ath79_reset = platform_get_drvdata(pdev);

	unregister_restart_handler(&ath79_reset->restart_nb);
	reset_controller_unregister(&ath79_reset->rcdev);

	return 0;
}
+1 −11
Original line number Diff line number Diff line
@@ -112,21 +112,11 @@ static int oxnas_reset_probe(struct platform_device *pdev)
	data->rcdev.ops = &oxnas_reset_ops;
	data->rcdev.of_node = pdev->dev.of_node;

	return reset_controller_register(&data->rcdev);
}

static int oxnas_reset_remove(struct platform_device *pdev)
{
	struct oxnas_reset *data = platform_get_drvdata(pdev);

	reset_controller_unregister(&data->rcdev);

	return 0;
	return devm_reset_controller_register(&pdev->dev, &data->rcdev);
}

static struct platform_driver oxnas_reset_driver = {
	.probe	= oxnas_reset_probe,
	.remove	= oxnas_reset_remove,
	.driver = {
		.name		= "oxnas-reset",
		.of_match_table	= oxnas_reset_dt_ids,
Loading