Skip to content

Commit

Permalink
Merge branch 'sunxi/drivers-for-3.16' of https://github.com/mripard/l…
Browse files Browse the repository at this point in the history
…inux into next/drivers

Merge "Allwinner drivers changes for 3.16" from Maxime Ripard:

Reset drivers for the A31, that have been merged with reset maintainer's
Acked-by.

* 'sunxi/drivers-for-3.16' of https://github.com/mripard/linux:
  reset: sunxi: allow MFD subdevices probe
  reset: sunxi: document sunxi's reset controllers bindings

Signed-off-by: Olof Johansson <[email protected]>
  • Loading branch information
olofj committed May 21, 2014
2 parents 02be974 + cd90f0c commit ed99885
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
Allwinner sunxi Peripheral Reset Controller
===========================================

Please also refer to reset.txt in this directory for common reset
controller binding usage.

Required properties:
- compatible: Should be one of the following:
"allwinner,sun6i-a31-ahb1-reset"
"allwinner,sun6i-a31-clock-reset"
- reg: should be register base and length as documented in the
datasheet
- #reset-cells: 1, see below

example:

ahb1_rst: reset@01c202c0 {
#reset-cells = <1>;
compatible = "allwinner,sun6i-a31-ahb1-reset";
reg = <0x01c202c0 0xc>;
};
21 changes: 18 additions & 3 deletions drivers/reset/reset-sunxi.c
Original file line number Diff line number Diff line change
Expand Up @@ -145,16 +145,31 @@ MODULE_DEVICE_TABLE(of, sunxi_reset_dt_ids);

static int sunxi_reset_probe(struct platform_device *pdev)
{
return sunxi_reset_init(pdev->dev.of_node);
struct sunxi_reset_data *data;
struct resource *res;

data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
if (!data)
return -ENOMEM;

res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
data->membase = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(data->membase))
return PTR_ERR(data->membase);

data->rcdev.owner = THIS_MODULE;
data->rcdev.nr_resets = resource_size(res) * 32;
data->rcdev.ops = &sunxi_reset_ops;
data->rcdev.of_node = pdev->dev.of_node;

return reset_controller_register(&data->rcdev);
}

static int sunxi_reset_remove(struct platform_device *pdev)
{
struct sunxi_reset_data *data = platform_get_drvdata(pdev);

reset_controller_unregister(&data->rcdev);
iounmap(data->membase);
kfree(data);

return 0;
}
Expand Down

0 comments on commit ed99885

Please sign in to comment.