Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'sunxi/drivers-for-3.16' of https://github.com/mripard/linux 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 <olof@lixom.net>

+39 -3
+21
Documentation/devicetree/bindings/reset/allwinner,sunxi-clock-reset.txt
··· 1 + Allwinner sunxi Peripheral Reset Controller 2 + =========================================== 3 + 4 + Please also refer to reset.txt in this directory for common reset 5 + controller binding usage. 6 + 7 + Required properties: 8 + - compatible: Should be one of the following: 9 + "allwinner,sun6i-a31-ahb1-reset" 10 + "allwinner,sun6i-a31-clock-reset" 11 + - reg: should be register base and length as documented in the 12 + datasheet 13 + - #reset-cells: 1, see below 14 + 15 + example: 16 + 17 + ahb1_rst: reset@01c202c0 { 18 + #reset-cells = <1>; 19 + compatible = "allwinner,sun6i-a31-ahb1-reset"; 20 + reg = <0x01c202c0 0xc>; 21 + };
+18 -3
drivers/reset/reset-sunxi.c
··· 145 145 146 146 static int sunxi_reset_probe(struct platform_device *pdev) 147 147 { 148 - return sunxi_reset_init(pdev->dev.of_node); 148 + struct sunxi_reset_data *data; 149 + struct resource *res; 150 + 151 + data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); 152 + if (!data) 153 + return -ENOMEM; 154 + 155 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 156 + data->membase = devm_ioremap_resource(&pdev->dev, res); 157 + if (IS_ERR(data->membase)) 158 + return PTR_ERR(data->membase); 159 + 160 + data->rcdev.owner = THIS_MODULE; 161 + data->rcdev.nr_resets = resource_size(res) * 32; 162 + data->rcdev.ops = &sunxi_reset_ops; 163 + data->rcdev.of_node = pdev->dev.of_node; 164 + 165 + return reset_controller_register(&data->rcdev); 149 166 } 150 167 151 168 static int sunxi_reset_remove(struct platform_device *pdev) ··· 170 153 struct sunxi_reset_data *data = platform_get_drvdata(pdev); 171 154 172 155 reset_controller_unregister(&data->rcdev); 173 - iounmap(data->membase); 174 - kfree(data); 175 156 176 157 return 0; 177 158 }