static const char *const bcm5301x_dt_compat[] __initconst = {
"brcm,bcm4708",
-@@ -52,6 +18,5 @@ static const char *const bcm5301x_dt_compat[] __initconst = {
+@@ -52,6 +18,5 @@ static const char *const bcm5301x_dt_com
DT_MACHINE_START(BCM5301X, "BCM5301X")
.l2c_aux_val = 0,
.l2c_aux_mask = ~0,
{
void __iomem *boot_reg;
phys_addr_t boot_func;
-@@ -154,15 +179,16 @@ static int bcm_boot_secondary(unsigned int cpu, struct task_struct *idle)
+@@ -154,15 +179,16 @@ static int bcm_boot_secondary(unsigned i
return -EINVAL;
}
}
/*
-@@ -191,12 +217,12 @@ static int bcm_boot_secondary(unsigned int cpu, struct task_struct *idle)
+@@ -191,12 +217,12 @@ static int bcm_boot_secondary(unsigned i
pr_err("timeout waiting for cpu %u to start\n", cpu_id);
# BCM281XX
obj-$(CONFIG_ARCH_BCM_281XX) += board_bcm281xx.o
-@@ -23,7 +27,7 @@ obj-$(CONFIG_ARCH_BCM_281XX) += board_bcm281xx.o
+@@ -23,7 +27,7 @@ obj-$(CONFIG_ARCH_BCM_281XX) += board_bc
obj-$(CONFIG_ARCH_BCM_21664) += board_bcm21664.o
# BCM281XX and BCM21664 SMP support
Support for Broadcom BCM470X and BCM5301X SoCs with ARM CPU cores.
--- a/arch/arm/mach-bcm/Makefile
+++ b/arch/arm/mach-bcm/Makefile
-@@ -43,6 +43,9 @@ obj-$(CONFIG_ARCH_BCM2835) += board_bcm2835.o
+@@ -43,6 +43,9 @@ obj-$(CONFIG_ARCH_BCM2835) += board_bcm2
# BCM5301X
obj-$(CONFIG_ARCH_BCM_5301X) += bcm_5301x.o
+ };
+
+ iprocmed: iprocmed {
-+ #clock-cells = <0>;
+ #clock-cells = <0>;
+- clock-frequency = <400000000>;
+ compatible = "fixed-factor-clock";
+ clocks = <&genpll BCM_NSP_GENPLL_IPROCFAST_CLK>;
+ clock-div = <2>;
+ };
+
+ periph_clk: periph_clk {
- #clock-cells = <0>;
-- clock-frequency = <400000000>;
++ #clock-cells = <0>;
+ compatible = "fixed-factor-clock";
+ clocks = <&a9pll>;
+ clock-div = <2>;
+ };
--- a/Documentation/devicetree/bindings/arm/cpus.txt
+++ b/Documentation/devicetree/bindings/arm/cpus.txt
-@@ -190,6 +190,7 @@ nodes to be present and contain the properties described below.
+@@ -190,6 +190,7 @@ nodes to be present and contain the prop
"allwinner,sun6i-a31"
"allwinner,sun8i-a23"
"arm,psci"
};
/* Wait for bitmask in a register to get set or cleared.
-@@ -228,19 +230,12 @@ static void bcma_hcd_init_chip_arm(struct bcma_device *dev)
+@@ -228,19 +230,12 @@ static void bcma_hcd_init_chip_arm(struc
static void bcma_hci_platform_power_gpio(struct bcma_device *dev, bool val)
{
}
static const struct usb_ehci_pdata ehci_pdata = {
-@@ -314,7 +309,11 @@ static int bcma_hcd_probe(struct bcma_device *dev)
+@@ -314,7 +309,11 @@ static int bcma_hcd_probe(struct bcma_de
if (!usb_dev)
return -ENOMEM;
--- a/drivers/pci/host/Kconfig
+++ b/drivers/pci/host/Kconfig
-@@ -126,6 +126,15 @@ config PCIE_IPROC
+@@ -127,6 +127,15 @@ config PCIE_IPROC
iProc family of SoCs. An appropriate bus interface driver also needs
to be enabled
--- a/drivers/usb/host/bcma-hcd.c
+++ b/drivers/usb/host/bcma-hcd.c
-@@ -568,8 +568,7 @@ static int bcma_hcd_probe(struct bcma_device *dev)
+@@ -568,8 +568,7 @@ static int bcma_hcd_probe(struct bcma_de
usb_dev->core = dev;
if (dev->dev.of_node)
--- a/drivers/mtd/bcm47xxpart.c
+++ b/drivers/mtd/bcm47xxpart.c
-@@ -100,6 +100,7 @@ static int bcm47xxpart_parse(struct mtd_
+@@ -127,6 +127,7 @@ static int bcm47xxpart_parse(struct mtd_
int last_trx_part = -1;
int possible_nvram_sizes[] = { 0x8000, 0xF000, 0x10000, };
int err;
/*
* Some really old flashes (like AT45DB*) had smaller erasesize-s, but
-@@ -306,12 +307,23 @@ static int bcm47xxpart_parse(struct mtd_
+@@ -334,12 +335,23 @@ static int bcm47xxpart_parse(struct mtd_
if (buf[0] == NVRAM_HEADER) {
bcm47xxpart_add_part(&parts[curr_part++], "nvram",
master->size - blocksize, 0);
--- a/drivers/mtd/bcm47xxpart.c
+++ b/drivers/mtd/bcm47xxpart.c
-@@ -61,6 +61,34 @@ static void bcm47xxpart_add_part(struct mtd_partition *part, const char *name,
+@@ -61,6 +61,34 @@ static void bcm47xxpart_add_part(struct
part->mask_flags = mask_flags;
}
static const char *bcm47xxpart_trx_data_part_name(struct mtd_info *master,
size_t offset)
{
-@@ -182,6 +210,8 @@ static int bcm47xxpart_parse(struct mtd_info *master,
+@@ -182,6 +210,8 @@ static int bcm47xxpart_parse(struct mtd_
/* TRX */
if (buf[0x000 / 4] == TRX_MAGIC) {
if (BCM47XXPART_MAX_PARTS - curr_part < 4) {
pr_warn("Not enough partitions left to register trx, scanning stopped!\n");
break;
-@@ -196,18 +226,18 @@ static int bcm47xxpart_parse(struct mtd_info *master,
+@@ -196,18 +226,18 @@ static int bcm47xxpart_parse(struct mtd_
i = 0;
/* We have LZMA loader if offset[2] points to sth */
if (trx->offset[2]) {
i++;
}
-@@ -219,11 +249,11 @@ static int bcm47xxpart_parse(struct mtd_info *master,
+@@ -219,11 +249,11 @@ static int bcm47xxpart_parse(struct mtd_
if (trx->offset[i]) {
const char *name;
.probe = at803x_probe,
.config_init = at803x_config_init,
.link_change_notify = at803x_link_change_notify,
-@@ -413,7 +438,7 @@ static struct phy_driver at803x_driver[]
+@@ -415,7 +440,7 @@ static struct phy_driver at803x_driver[]
/* ATHEROS 8030 */
.phy_id = ATH8030_PHY_ID,
.name = "Atheros 8030 ethernet",
.probe = at803x_probe,
.config_init = at803x_config_init,
.link_change_notify = at803x_link_change_notify,
-@@ -431,8 +456,8 @@ static struct phy_driver at803x_driver[]
+@@ -435,8 +460,8 @@ static struct phy_driver at803x_driver[]
}, {
/* ATHEROS 8031 */
.phy_id = ATH8031_PHY_ID,
.probe = at803x_probe,
.config_init = at803x_config_init,
.link_change_notify = at803x_link_change_notify,
-@@ -454,9 +479,9 @@ static struct phy_driver at803x_driver[]
+@@ -458,9 +483,9 @@ static struct phy_driver at803x_driver[]
module_phy_driver(at803x_driver);
static struct mdio_device_id __maybe_unused atheros_tbl[] = {
struct device_node *pp;
int nr_parts, i, ret = 0;
bool dedicated = true;
-@@ -102,9 +105,15 @@ static int parse_ofpart_partitions(struc
+@@ -110,9 +113,15 @@ static int parse_ofpart_partitions(struc
(*pparts)[i].offset = of_read_number(reg, a_cells);
(*pparts)[i].size = of_read_number(reg + a_cells, s_cells);
(*pparts)[i].name = partname;
if (of_get_property(pp, "read-only", &len))
-@@ -207,6 +216,18 @@ static int __init ofpart_parser_init(voi
+@@ -215,6 +224,18 @@ static int __init ofpart_parser_init(voi
return 0;
}
--- a/arch/arm/mach-omap2/twl-common.c
+++ b/arch/arm/mach-omap2/twl-common.c
-@@ -280,6 +280,7 @@ static struct regulator_init_data omap4_
+@@ -368,6 +368,7 @@ static struct regulator_init_data omap4_
static struct regulator_init_data omap4_clk32kg_idata = {
.constraints = {
.valid_ops_mask = REGULATOR_CHANGE_STATUS,
drivers/clk/sunxi/clk-simple-gates.c | 12 ++++++++++++
2 files changed, 13 insertions(+)
-diff --git a/Documentation/devicetree/bindings/clock/sunxi.txt b/Documentation/devicetree/bindings/clock/sunxi.txt
-index 153ac72..ef0b452 100644
-diff --git a/drivers/clk/sunxi/clk-simple-gates.c b/drivers/clk/sunxi/clk-simple-gates.c
-index c8acc06..f4da52b 100644
--- a/drivers/clk/sunxi/clk-simple-gates.c
+++ b/drivers/clk/sunxi/clk-simple-gates.c
-@@ -160,3 +160,15 @@ CLK_OF_DECLARE(sun5i_a13_ahb, "allwinner,sun5i-a13-ahb-gates-clk",
+@@ -158,3 +158,15 @@ CLK_OF_DECLARE(sun5i_a13_ahb, "allwinner
sun4i_a10_ahb_init);
CLK_OF_DECLARE(sun7i_a20_ahb, "allwinner,sun7i-a20-ahb-gates-clk",
sun4i_a10_ahb_init);
arch/arm/boot/dts/sun4i-a10.dtsi | 36 ++++++++++++++++++++++++++++++++----
1 file changed, 32 insertions(+), 4 deletions(-)
-diff --git a/arch/arm/boot/dts/sun4i-a10.dtsi b/arch/arm/boot/dts/sun4i-a10.dtsi
-index aa90f31..849d024 100644
--- a/arch/arm/boot/dts/sun4i-a10.dtsi
+++ b/arch/arm/boot/dts/sun4i-a10.dtsi
@@ -66,7 +66,7 @@
arch/arm/boot/dts/sun7i-a20.dtsi | 32 +++++++++++++++++++++++++++++---
1 file changed, 29 insertions(+), 3 deletions(-)
-diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi
-index e02eb72..21169c0 100644
--- a/arch/arm/boot/dts/sun7i-a20.dtsi
+++ b/arch/arm/boot/dts/sun7i-a20.dtsi
@@ -68,7 +68,7 @@
4 files changed, 121 insertions(+)
create mode 100644 drivers/clk/sunxi/clk-sun8i-bus-gates.c
-diff --git a/Documentation/devicetree/bindings/clock/sunxi.txt b/Documentation/devicetree/bindings/clock/sunxi.txt
-index ef0b452..014eab8 100644
-diff --git a/drivers/clk/sunxi/Makefile b/drivers/clk/sunxi/Makefile
-index 103efab..abf4916 100644
--- a/drivers/clk/sunxi/Makefile
+++ b/drivers/clk/sunxi/Makefile
@@ -10,6 +10,7 @@ obj-y += clk-a10-pll2.o
obj-y += clk-sun8i-mbus.o
obj-y += clk-sun9i-core.o
obj-y += clk-sun9i-mmc.o
-diff --git a/drivers/clk/sunxi/clk-sun8i-bus-gates.c b/drivers/clk/sunxi/clk-sun8i-bus-gates.c
-new file mode 100644
-index 0000000..7ab60c5
--- /dev/null
+++ b/drivers/clk/sunxi/clk-sun8i-bus-gates.c
@@ -0,0 +1,112 @@
+
+CLK_OF_DECLARE(sun8i_h3_bus_gates, "allwinner,sun8i-h3-bus-gates-clk",
+ sun8i_h3_bus_gates_init);
-diff --git a/drivers/clk/sunxi/clk-sunxi.c b/drivers/clk/sunxi/clk-sunxi.c
-index 9c79af0c..5ba2188 100644
--- a/drivers/clk/sunxi/clk-sunxi.c
+++ b/drivers/clk/sunxi/clk-sunxi.c
-@@ -778,6 +778,10 @@ static const struct mux_data sun6i_a31_ahb1_mux_data __initconst = {
+@@ -778,6 +778,10 @@ static const struct mux_data sun6i_a31_a
.shift = 12,
};
static void __init sunxi_mux_clk_setup(struct device_node *node,
struct mux_data *data)
{
-@@ -1130,6 +1134,7 @@ static const struct of_device_id clk_divs_match[] __initconst = {
+@@ -1130,6 +1134,7 @@ static const struct of_device_id clk_div
static const struct of_device_id clk_mux_match[] __initconst = {
{.compatible = "allwinner,sun4i-a10-cpu-clk", .data = &sun4i_cpu_mux_data,},
{.compatible = "allwinner,sun6i-a31-ahb1-mux-clk", .data = &sun6i_a31_ahb1_mux_data,},
{}
};
-@@ -1212,6 +1217,7 @@ CLK_OF_DECLARE(sun6i_a31_clk_init, "allwinner,sun6i-a31", sun6i_init_clocks);
+@@ -1212,6 +1217,7 @@ CLK_OF_DECLARE(sun6i_a31_clk_init, "allw
CLK_OF_DECLARE(sun6i_a31s_clk_init, "allwinner,sun6i-a31s", sun6i_init_clocks);
CLK_OF_DECLARE(sun8i_a23_clk_init, "allwinner,sun8i-a23", sun6i_init_clocks);
CLK_OF_DECLARE(sun8i_a33_clk_init, "allwinner,sun8i-a33", sun6i_init_clocks);
1 file changed, 497 insertions(+)
create mode 100644 arch/arm/boot/dts/sun8i-h3.dtsi
-diff --git a/arch/arm/boot/dts/sun8i-h3.dtsi b/arch/arm/boot/dts/sun8i-h3.dtsi
-new file mode 100644
-index 0000000..1524130e
--- /dev/null
+++ b/arch/arm/boot/dts/sun8i-h3.dtsi
@@ -0,0 +1,497 @@
2 files changed, 79 insertions(+), 1 deletion(-)
create mode 100644 arch/arm/boot/dts/sun8i-h3-orangepi-plus.dts
-diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
-index e8f44c7..cc7309b 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
-@@ -661,7 +661,8 @@ dtb-$(CONFIG_MACH_SUN8I) += \
+@@ -660,7 +660,8 @@ dtb-$(CONFIG_MACH_SUN8I) += \
sun8i-a33-ga10h-v1.1.dtb \
sun8i-a33-ippo-q8h-v1.2.dtb \
sun8i-a33-q8-tablet.dtb \
dtb-$(CONFIG_MACH_SUN9I) += \
sun9i-a80-optimus.dtb \
sun9i-a80-cubieboard4.dtb
-diff --git a/arch/arm/boot/dts/sun8i-h3-orangepi-plus.dts b/arch/arm/boot/dts/sun8i-h3-orangepi-plus.dts
-new file mode 100644
-index 0000000..e67df59
--- /dev/null
+++ b/arch/arm/boot/dts/sun8i-h3-orangepi-plus.dts
@@ -0,0 +1,77 @@
drivers/phy/phy-sun4i-usb.c | 121 +++++++++++++++++++++++++++++---------------
1 file changed, 79 insertions(+), 42 deletions(-)
-diff --git a/drivers/phy/phy-sun4i-usb.c b/drivers/phy/phy-sun4i-usb.c
-index b12964b..35b1fa3 100644
--- a/drivers/phy/phy-sun4i-usb.c
+++ b/drivers/phy/phy-sun4i-usb.c
@@ -32,6 +32,7 @@
struct sun4i_usb_phy {
struct phy *phy;
void __iomem *pmu;
-@@ -159,17 +171,14 @@ static void sun4i_usb_phy_write(struct sun4i_usb_phy *phy, u32 addr, u32 data,
+@@ -159,17 +171,14 @@ static void sun4i_usb_phy_write(struct s
{
struct sun4i_usb_phy_data *phy_data = to_sun4i_usb_phy_data(phy);
u32 temp, usbc_bit = BIT(phy->index * 2);
}
for (i = 0; i < len; i++) {
-@@ -249,7 +258,8 @@ static int sun4i_usb_phy_init(struct phy *_phy)
+@@ -249,7 +258,8 @@ static int sun4i_usb_phy_init(struct phy
sun4i_usb_phy_write(phy, PHY_TX_AMPLITUDE_TUNE, 0x14, 5);
/* Disconnect threshold adjustment */
sun4i_usb_phy_passby(phy, 1);
-@@ -476,7 +486,7 @@ static struct phy *sun4i_usb_phy_xlate(struct device *dev,
+@@ -476,7 +486,7 @@ static struct phy *sun4i_usb_phy_xlate(s
{
struct sun4i_usb_phy_data *data = dev_get_drvdata(dev);
return ERR_PTR(-ENODEV);
return data->phys[args->args[0]].phy;
-@@ -511,7 +521,6 @@ static int sun4i_usb_phy_probe(struct platform_device *pdev)
+@@ -511,7 +521,6 @@ static int sun4i_usb_phy_probe(struct pl
struct device *dev = &pdev->dev;
struct device_node *np = dev->of_node;
struct phy_provider *phy_provider;
struct resource *res;
int i, ret;
-@@ -522,29 +531,9 @@ static int sun4i_usb_phy_probe(struct platform_device *pdev)
+@@ -522,29 +531,9 @@ static int sun4i_usb_phy_probe(struct pl
mutex_init(&data->mutex);
INIT_DELAYED_WORK(&data->detect, sun4i_usb_phy0_id_vbus_det_scan);
dev_set_drvdata(dev, data);
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "phy_ctrl");
data->base = devm_ioremap_resource(dev, res);
-@@ -590,7 +579,7 @@ static int sun4i_usb_phy_probe(struct platform_device *pdev)
+@@ -590,7 +579,7 @@ static int sun4i_usb_phy_probe(struct pl
}
}
struct sun4i_usb_phy *phy = data->phys + i;
char name[16];
-@@ -602,7 +591,7 @@ static int sun4i_usb_phy_probe(struct platform_device *pdev)
+@@ -602,7 +591,7 @@ static int sun4i_usb_phy_probe(struct pl
phy->vbus = NULL;
}
snprintf(name, sizeof(name), "usb%d_phy", i);
else
strlcpy(name, "usb_phy", sizeof(name));
-@@ -689,13 +678,61 @@ static int sun4i_usb_phy_probe(struct platform_device *pdev)
+@@ -689,13 +678,61 @@ static int sun4i_usb_phy_probe(struct pl
return 0;
}
drivers/phy/phy-sun4i-usb.c | 41 +++++++++++++++++-----
2 files changed, 33 insertions(+), 9 deletions(-)
-diff --git a/Documentation/devicetree/bindings/phy/sun4i-usb-phy.txt b/Documentation/devicetree/bindings/phy/sun4i-usb-phy.txt
-index 0cebf74..95736d7 100644
--- a/Documentation/devicetree/bindings/phy/sun4i-usb-phy.txt
+++ b/Documentation/devicetree/bindings/phy/sun4i-usb-phy.txt
@@ -9,6 +9,7 @@ Required properties:
- reg : a list of offset + length pairs
- reg-names :
* "phy_ctrl"
-diff --git a/drivers/phy/phy-sun4i-usb.c b/drivers/phy/phy-sun4i-usb.c
-index 35b1fa3..bae54f7 100644
--- a/drivers/phy/phy-sun4i-usb.c
+++ b/drivers/phy/phy-sun4i-usb.c
@@ -47,6 +47,9 @@
};
struct sun4i_usb_phy_cfg {
-@@ -239,6 +243,7 @@ static int sun4i_usb_phy_init(struct phy *_phy)
+@@ -239,6 +243,7 @@ static int sun4i_usb_phy_init(struct phy
struct sun4i_usb_phy *phy = phy_get_drvdata(_phy);
struct sun4i_usb_phy_data *data = to_sun4i_usb_phy_data(phy);
int ret;
ret = clk_prepare_enable(phy->clk);
if (ret)
-@@ -250,16 +255,26 @@ static int sun4i_usb_phy_init(struct phy *_phy)
+@@ -250,16 +255,26 @@ static int sun4i_usb_phy_init(struct phy
return ret;
}
- /* Enable USB 45 Ohm resistor calibration */
- if (phy->index == 0)
- sun4i_usb_phy_write(phy, PHY_RES45_CAL_EN, 0x01, 1);
+-
+- /* Adjust PHY's magnitude and rate */
+- sun4i_usb_phy_write(phy, PHY_TX_AMPLITUDE_TUNE, 0x14, 5);
+-
+- /* Disconnect threshold adjustment */
+- sun4i_usb_phy_write(phy, PHY_DISCON_TH_SEL,
+- data->cfg->disc_thresh, 2);
+ if (data->cfg->type == sun8i_h3_phy) {
+ if (phy->index == 0) {
+ val = readl(data->base + REG_PHY_UNK_H3);
+ /* Enable USB 45 Ohm resistor calibration */
+ if (phy->index == 0)
+ sun4i_usb_phy_write(phy, PHY_RES45_CAL_EN, 0x01, 1);
-
-- /* Adjust PHY's magnitude and rate */
-- sun4i_usb_phy_write(phy, PHY_TX_AMPLITUDE_TUNE, 0x14, 5);
++
+ /* Adjust PHY's magnitude and rate */
+ sun4i_usb_phy_write(phy, PHY_TX_AMPLITUDE_TUNE, 0x14, 5);
-
-- /* Disconnect threshold adjustment */
-- sun4i_usb_phy_write(phy, PHY_DISCON_TH_SEL,
-- data->cfg->disc_thresh, 2);
++
+ /* Disconnect threshold adjustment */
+ sun4i_usb_phy_write(phy, PHY_DISCON_TH_SEL,
+ data->cfg->disc_thresh, 2);
sun4i_usb_phy_passby(phy, 1);
-@@ -726,6 +741,13 @@ static const struct sun4i_usb_phy_cfg sun8i_a33_cfg = {
+@@ -726,6 +741,13 @@ static const struct sun4i_usb_phy_cfg su
.dedicated_clocks = true,
};
static const struct of_device_id sun4i_usb_phy_of_match[] = {
{ .compatible = "allwinner,sun4i-a10-usb-phy", .data = &sun4i_a10_cfg },
{ .compatible = "allwinner,sun5i-a13-usb-phy", .data = &sun5i_a13_cfg },
-@@ -733,6 +755,7 @@ static const struct of_device_id sun4i_usb_phy_of_match[] = {
+@@ -733,6 +755,7 @@ static const struct of_device_id sun4i_u
{ .compatible = "allwinner,sun7i-a20-usb-phy", .data = &sun7i_a20_cfg },
{ .compatible = "allwinner,sun8i-a23-usb-phy", .data = &sun8i_a23_cfg },
{ .compatible = "allwinner,sun8i-a33-usb-phy", .data = &sun8i_a33_cfg },
drivers/clk/sunxi/clk-usb.c | 12 ++++++++++++
2 files changed, 13 insertions(+)
-diff --git a/Documentation/devicetree/bindings/clock/sunxi.txt b/Documentation/devicetree/bindings/clock/sunxi.txt
-index 8a47b77..a94bb56 100644
--- a/Documentation/devicetree/bindings/clock/sunxi.txt
+++ b/Documentation/devicetree/bindings/clock/sunxi.txt
@@ -68,6 +68,7 @@ Required properties:
"allwinner,sun9i-a80-usb-mod-clk" - for usb gates + resets on A80
"allwinner,sun9i-a80-usb-phy-clk" - for usb phy gates + resets on A80
-diff --git a/drivers/clk/sunxi/clk-usb.c b/drivers/clk/sunxi/clk-usb.c
-index 1a72cd6..67b8e38 100644
--- a/drivers/clk/sunxi/clk-usb.c
+++ b/drivers/clk/sunxi/clk-usb.c
-@@ -243,3 +243,15 @@ static void __init sun9i_a80_usb_phy_setup(struct device_node *node)
+@@ -243,3 +243,15 @@ static void __init sun9i_a80_usb_phy_set
sunxi_usb_clk_setup(node, &sun9i_a80_usb_phy_data, &a80_usb_phy_lock);
}
CLK_OF_DECLARE(sun9i_a80_usb_phy, "allwinner,sun9i-a80-usb-phy-clk", sun9i_a80_usb_phy_setup);
3 files changed, 176 insertions(+)
create mode 100644 drivers/clk/sunxi/clk-a10-ve.c
-diff --git a/Documentation/devicetree/bindings/clock/sunxi.txt b/Documentation/devicetree/bindings/clock/sunxi.txt
-index 014eab8..e59f57b 100644
--- a/Documentation/devicetree/bindings/clock/sunxi.txt
+++ b/Documentation/devicetree/bindings/clock/sunxi.txt
-@@ -76,6 +76,7 @@ Required properties:
+@@ -71,6 +71,7 @@ Required properties:
"allwinner,sun8i-h3-usb-clk" - for usb gates + resets on H3
"allwinner,sun9i-a80-usb-mod-clk" - for usb gates + resets on A80
"allwinner,sun9i-a80-usb-phy-clk" - for usb phy gates + resets on A80
Required properties for all clocks:
- reg : shall be the control register address for the clock.
-@@ -95,6 +96,9 @@ Required properties for all clocks:
+@@ -90,6 +91,9 @@ Required properties for all clocks:
And "allwinner,*-usb-clk" clocks also require:
- reset-cells : shall be set to 1
The "allwinner,sun9i-a80-mmc-config-clk" clock also requires:
- #reset-cells : shall be set to 1
- resets : shall be the reset control phandle for the mmc block.
-diff --git a/drivers/clk/sunxi/Makefile b/drivers/clk/sunxi/Makefile
-index abf4916..1a909f9 100644
--- a/drivers/clk/sunxi/Makefile
+++ b/drivers/clk/sunxi/Makefile
@@ -7,6 +7,7 @@ obj-y += clk-a10-codec.o
obj-y += clk-a20-gmac.o
obj-y += clk-mod0.o
obj-y += clk-simple-gates.o
-diff --git a/drivers/clk/sunxi/clk-a10-ve.c b/drivers/clk/sunxi/clk-a10-ve.c
-new file mode 100644
-index 0000000..044c171
--- /dev/null
+++ b/drivers/clk/sunxi/clk-a10-ve.c
@@ -0,0 +1,171 @@
arch/arm/boot/dts/sun4i-a10.dtsi | 9 +++++++++
1 file changed, 9 insertions(+)
-diff --git a/arch/arm/boot/dts/sun4i-a10.dtsi b/arch/arm/boot/dts/sun4i-a10.dtsi
-index 849d024..2c8f5e6 100644
--- a/arch/arm/boot/dts/sun4i-a10.dtsi
+++ b/arch/arm/boot/dts/sun4i-a10.dtsi
@@ -520,6 +520,15 @@
arch/arm/boot/dts/sun7i-a20.dtsi | 9 +++++++++
1 file changed, 9 insertions(+)
-diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi
-index 21169c0..0940a78 100644
--- a/arch/arm/boot/dts/sun7i-a20.dtsi
+++ b/arch/arm/boot/dts/sun7i-a20.dtsi
@@ -527,6 +527,15 @@
drivers/usb/musb/sunxi.c | 4 ++++
1 file changed, 4 insertions(+)
-diff --git a/drivers/usb/musb/sunxi.c b/drivers/usb/musb/sunxi.c
-index d9b0dc4..4b472b8 100644
--- a/drivers/usb/musb/sunxi.c
+++ b/drivers/usb/musb/sunxi.c
-@@ -194,6 +194,10 @@ static irqreturn_t sunxi_musb_interrupt(int irq, void *__hci)
+@@ -194,6 +194,10 @@ static irqreturn_t sunxi_musb_interrupt(
musb_writeb(musb->mregs, MUSB_FADDR, 0);
}
drivers/crypto/sunxi-ss/sun4i-ss-core.c | 2 ++
1 file changed, 2 insertions(+)
-diff --git a/drivers/crypto/sunxi-ss/sun4i-ss-core.c b/drivers/crypto/sunxi-ss/sun4i-ss-core.c
-index eab6fe2..107cd2a 100644
--- a/drivers/crypto/sunxi-ss/sun4i-ss-core.c
+++ b/drivers/crypto/sunxi-ss/sun4i-ss-core.c
-@@ -39,6 +39,7 @@ static struct sun4i_ss_alg_template ss_algs[] = {
+@@ -39,6 +39,7 @@ static struct sun4i_ss_alg_template ss_a
.import = sun4i_hash_import_md5,
.halg = {
.digestsize = MD5_DIGEST_SIZE,
.base = {
.cra_name = "md5",
.cra_driver_name = "md5-sun4i-ss",
-@@ -66,6 +67,7 @@ static struct sun4i_ss_alg_template ss_algs[] = {
+@@ -66,6 +67,7 @@ static struct sun4i_ss_alg_template ss_a
.import = sun4i_hash_import_sha1,
.halg = {
.digestsize = SHA1_DIGEST_SIZE,
4 files changed, 522 insertions(+)
create mode 100644 drivers/pinctrl/sunxi/pinctrl-sun8i-h3.c
-diff --git a/Documentation/devicetree/bindings/pinctrl/allwinner,sunxi-pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/allwinner,sunxi-pinctrl.txt
-index b321b26..e6ba602 100644
--- a/Documentation/devicetree/bindings/pinctrl/allwinner,sunxi-pinctrl.txt
+++ b/Documentation/devicetree/bindings/pinctrl/allwinner,sunxi-pinctrl.txt
@@ -18,6 +18,7 @@ Required properties:
- reg: Should contain the register physical address and length for the
pin controller.
-diff --git a/drivers/pinctrl/sunxi/Kconfig b/drivers/pinctrl/sunxi/Kconfig
-index e68fd95..89ab7f5 100644
--- a/drivers/pinctrl/sunxi/Kconfig
+++ b/drivers/pinctrl/sunxi/Kconfig
@@ -51,6 +51,10 @@ config PINCTRL_SUN8I_A23_R
config PINCTRL_SUN9I_A80
def_bool MACH_SUN9I
select PINCTRL_SUNXI_COMMON
-diff --git a/drivers/pinctrl/sunxi/Makefile b/drivers/pinctrl/sunxi/Makefile
-index e080290..6bd818e 100644
--- a/drivers/pinctrl/sunxi/Makefile
+++ b/drivers/pinctrl/sunxi/Makefile
-@@ -13,4 +13,5 @@ obj-$(CONFIG_PINCTRL_SUN8I_A23) += pinctrl-sun8i-a23.o
+@@ -13,4 +13,5 @@ obj-$(CONFIG_PINCTRL_SUN8I_A23) += pinc
obj-$(CONFIG_PINCTRL_SUN8I_A23_R) += pinctrl-sun8i-a23-r.o
obj-$(CONFIG_PINCTRL_SUN8I_A33) += pinctrl-sun8i-a33.o
obj-$(CONFIG_PINCTRL_SUN8I_A83T) += pinctrl-sun8i-a83t.o
+obj-$(CONFIG_PINCTRL_SUN8I_H3) += pinctrl-sun8i-h3.o
obj-$(CONFIG_PINCTRL_SUN9I_A80) += pinctrl-sun9i-a80.o
-diff --git a/drivers/pinctrl/sunxi/pinctrl-sun8i-h3.c b/drivers/pinctrl/sunxi/pinctrl-sun8i-h3.c
-new file mode 100644
-index 0000000..98d465d
--- /dev/null
+++ b/drivers/pinctrl/sunxi/pinctrl-sun8i-h3.c
@@ -0,0 +1,516 @@
drivers/reset/reset-sunxi.c | 30 +++++++++++++++++++---
2 files changed, 28 insertions(+), 3 deletions(-)
-diff --git a/Documentation/devicetree/bindings/reset/allwinner,sunxi-clock-reset.txt b/Documentation/devicetree/bindings/reset/allwinner,sunxi-clock-reset.txt
-index c8f77571..e11f023 100644
--- a/Documentation/devicetree/bindings/reset/allwinner,sunxi-clock-reset.txt
+++ b/Documentation/devicetree/bindings/reset/allwinner,sunxi-clock-reset.txt
@@ -8,6 +8,7 @@ Required properties:
- reg: should be register base and length as documented in the
datasheet
- #reset-cells: 1, see below
-diff --git a/drivers/reset/reset-sunxi.c b/drivers/reset/reset-sunxi.c
-index 3d95c87..c91e146 100644
--- a/drivers/reset/reset-sunxi.c
+++ b/drivers/reset/reset-sunxi.c
-@@ -75,7 +75,9 @@ static struct reset_control_ops sunxi_reset_ops = {
+@@ -75,7 +75,9 @@ static struct reset_control_ops sunxi_re
.deassert = sunxi_reset_deassert,
};
{
struct sunxi_reset_data *data;
struct resource res;
-@@ -108,6 +110,7 @@ static int sunxi_reset_init(struct device_node *np)
+@@ -108,6 +110,7 @@ static int sunxi_reset_init(struct devic
data->rcdev.nr_resets = size * 32;
data->rcdev.ops = &sunxi_reset_ops;
data->rcdev.of_node = np;
reset_controller_register(&data->rcdev);
return 0;
-@@ -117,6 +120,21 @@ static int sunxi_reset_init(struct device_node *np)
+@@ -117,6 +120,21 @@ err_alloc:
return ret;
};
/*
* These are the reset controller we need to initialize early on in
* our system, before we can even think of using a regular device
-@@ -124,15 +142,21 @@ static int sunxi_reset_init(struct device_node *np)
+@@ -124,15 +142,21 @@ err_alloc:
*/
static const struct of_device_id sunxi_early_reset_dt_ids[] __initdata = {
{ .compatible = "allwinner,sun6i-a31-ahb1-reset", },
void __init sun6i_reset_init(void)
{
struct device_node *np;
+-
+- for_each_matching_node(np, sunxi_early_reset_dt_ids)
+- sunxi_reset_init(np);
+ const struct of_device_id *match;
+ int (*of_xlate)(struct reset_controller_dev *rcdev,
+ const struct of_phandle_args *reset_spec);
-
-- for_each_matching_node(np, sunxi_early_reset_dt_ids)
-- sunxi_reset_init(np);
++
+ for_each_matching_node_and_match(np, sunxi_early_reset_dt_ids, &match) {
+ of_xlate = match->data;
+ sunxi_reset_init(np, of_xlate);
arch/arm/boot/dts/sun8i-h3.dtsi | 12 ++++++++++++
1 file changed, 12 insertions(+)
-diff --git a/arch/arm/boot/dts/sun8i-h3.dtsi b/arch/arm/boot/dts/sun8i-h3.dtsi
-index 1524130e..cbab947 100644
--- a/arch/arm/boot/dts/sun8i-h3.dtsi
+++ b/arch/arm/boot/dts/sun8i-h3.dtsi
@@ -269,6 +269,18 @@
arch/arm/boot/dts/sun8i-h3.dtsi | 101 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 101 insertions(+)
-diff --git a/arch/arm/boot/dts/sun8i-h3.dtsi b/arch/arm/boot/dts/sun8i-h3.dtsi
-index cbab947..1169f515 100644
--- a/arch/arm/boot/dts/sun8i-h3.dtsi
+++ b/arch/arm/boot/dts/sun8i-h3.dtsi
@@ -362,6 +362,107 @@
arch/arm/boot/dts/sun8i-h3-orangepi-plus.dts | 44 ++++++++++++++++++++++++++++
1 file changed, 44 insertions(+)
-diff --git a/arch/arm/boot/dts/sun8i-h3-orangepi-plus.dts b/arch/arm/boot/dts/sun8i-h3-orangepi-plus.dts
-index e67df59..1cb6c66 100644
--- a/arch/arm/boot/dts/sun8i-h3-orangepi-plus.dts
+++ b/arch/arm/boot/dts/sun8i-h3-orangepi-plus.dts
@@ -58,6 +58,35 @@
drivers/clk/sunxi/clk-sun8i-bus-gates.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/drivers/clk/sunxi/clk-sun8i-bus-gates.c b/drivers/clk/sunxi/clk-sun8i-bus-gates.c
-index 7ab60c5..b8c7753 100644
--- a/drivers/clk/sunxi/clk-sun8i-bus-gates.c
+++ b/drivers/clk/sunxi/clk-sun8i-bus-gates.c
-@@ -40,7 +40,7 @@ static void __init sun8i_h3_bus_gates_init(struct device_node *node)
+@@ -40,7 +40,7 @@ static void __init sun8i_h3_bus_gates_in
const __be32 *p;
int number, i;
u8 clk_bit;
include/linux/reset.h | 9 +++++++++
2 files changed, 38 insertions(+), 11 deletions(-)
-diff --git a/drivers/reset/core.c b/drivers/reset/core.c
-index 7955e00..81ae17d 100644
--- a/drivers/reset/core.c
+++ b/drivers/reset/core.c
-@@ -141,27 +141,24 @@ int reset_control_status(struct reset_control *rstc)
+@@ -141,27 +141,24 @@ int reset_control_status(struct reset_co
EXPORT_SYMBOL_GPL(reset_control_status);
/**
ret = of_parse_phandle_with_args(node, "resets", "#reset-cells",
index, &args);
if (ret)
-@@ -202,6 +199,27 @@ struct reset_control *of_reset_control_get(struct device_node *node,
+@@ -202,6 +199,27 @@ struct reset_control *of_reset_control_g
return rstc;
}
EXPORT_SYMBOL_GPL(of_reset_control_get);
/**
-diff --git a/include/linux/reset.h b/include/linux/reset.h
-index 7f65f9c..6db74ad 100644
--- a/include/linux/reset.h
+++ b/include/linux/reset.h
-@@ -38,6 +38,9 @@ static inline struct reset_control *devm_reset_control_get_optional(
+@@ -38,6 +38,9 @@ static inline struct reset_control *devm
struct reset_control *of_reset_control_get(struct device_node *node,
const char *id);
#else
static inline int reset_control_reset(struct reset_control *rstc)
-@@ -106,6 +109,12 @@ static inline struct reset_control *of_reset_control_get(
+@@ -106,6 +109,12 @@ static inline struct reset_control *of_r
return ERR_PTR(-ENOSYS);
}
drivers/reset/core.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
-diff --git a/drivers/reset/core.c b/drivers/reset/core.c
-index 81ae17d..77cfc49 100644
--- a/drivers/reset/core.c
+++ b/drivers/reset/core.c
-@@ -215,9 +215,12 @@ struct reset_control *of_reset_control_get(struct device_node *node,
+@@ -215,9 +215,12 @@ struct reset_control *of_reset_control_g
{
int index = 0;
include/linux/reset.h | 8 ++++----
2 files changed, 8 insertions(+), 8 deletions(-)
-diff --git a/drivers/reset/core.c b/drivers/reset/core.c
-index 77cfc49..9ab9290 100644
--- a/drivers/reset/core.c
+++ b/drivers/reset/core.c
-@@ -95,7 +95,7 @@ int reset_control_reset(struct reset_control *rstc)
+@@ -95,7 +95,7 @@ int reset_control_reset(struct reset_con
if (rstc->rcdev->ops->reset)
return rstc->rcdev->ops->reset(rstc->rcdev, rstc->id);
}
EXPORT_SYMBOL_GPL(reset_control_reset);
-@@ -108,7 +108,7 @@ int reset_control_assert(struct reset_control *rstc)
+@@ -108,7 +108,7 @@ int reset_control_assert(struct reset_co
if (rstc->rcdev->ops->assert)
return rstc->rcdev->ops->assert(rstc->rcdev, rstc->id);
}
EXPORT_SYMBOL_GPL(reset_control_assert);
-@@ -121,7 +121,7 @@ int reset_control_deassert(struct reset_control *rstc)
+@@ -121,7 +121,7 @@ int reset_control_deassert(struct reset_
if (rstc->rcdev->ops->deassert)
return rstc->rcdev->ops->deassert(rstc->rcdev, rstc->id);
}
EXPORT_SYMBOL_GPL(reset_control_deassert);
-@@ -136,7 +136,7 @@ int reset_control_status(struct reset_control *rstc)
+@@ -136,7 +136,7 @@ int reset_control_status(struct reset_co
if (rstc->rcdev->ops->status)
return rstc->rcdev->ops->status(rstc->rcdev, rstc->id);
}
EXPORT_SYMBOL_GPL(reset_control_status);
-diff --git a/include/linux/reset.h b/include/linux/reset.h
-index 6db74ad..c4c097d 100644
--- a/include/linux/reset.h
+++ b/include/linux/reset.h
-@@ -74,7 +74,7 @@ static inline void reset_control_put(struct reset_control *rstc)
+@@ -74,7 +74,7 @@ static inline void reset_control_put(str
static inline int device_reset_optional(struct device *dev)
{
}
static inline struct reset_control *__must_check reset_control_get(
-@@ -94,19 +94,19 @@ static inline struct reset_control *__must_check devm_reset_control_get(
+@@ -94,19 +94,19 @@ static inline struct reset_control *__mu
static inline struct reset_control *reset_control_get_optional(
struct device *dev, const char *id)
{
include/linux/reset.h | 2 +
3 files changed, 116 insertions(+), 9 deletions(-)
-diff --git a/drivers/reset/core.c b/drivers/reset/core.c
-index 9ab9290..8c3436c 100644
--- a/drivers/reset/core.c
+++ b/drivers/reset/core.c
-@@ -22,16 +22,29 @@ static DEFINE_MUTEX(reset_controller_list_mutex);
+@@ -22,16 +22,29 @@ static DEFINE_MUTEX(reset_controller_lis
static LIST_HEAD(reset_controller_list);
/**
};
/**
-@@ -66,6 +79,8 @@ int reset_controller_register(struct reset_controller_dev *rcdev)
+@@ -66,6 +79,8 @@ int reset_controller_register(struct res
rcdev->of_xlate = of_reset_simple_xlate;
}
mutex_lock(&reset_controller_list_mutex);
list_add(&rcdev->list, &reset_controller_list);
mutex_unlock(&reset_controller_list_mutex);
-@@ -93,7 +108,7 @@ EXPORT_SYMBOL_GPL(reset_controller_unregister);
+@@ -93,7 +108,7 @@ EXPORT_SYMBOL_GPL(reset_controller_unreg
int reset_control_reset(struct reset_control *rstc)
{
if (rstc->rcdev->ops->reset)
* reset_control_status - returns a negative errno if not supported, a
* positive value if the reset line is asserted, or zero if the reset
* line is not asserted.
-@@ -134,12 +191,47 @@ EXPORT_SYMBOL_GPL(reset_control_deassert);
+@@ -134,12 +191,47 @@ EXPORT_SYMBOL_GPL(reset_control_deassert
int reset_control_status(struct reset_control *rstc)
{
if (rstc->rcdev->ops->status)
/**
* of_reset_control_get_by_index - Lookup and obtain a reference to a reset
* controller by index.
-@@ -155,6 +247,7 @@ struct reset_control *of_reset_control_get_by_index(struct device_node *node,
+@@ -155,6 +247,7 @@ struct reset_control *of_reset_control_g
{
struct reset_control *rstc = ERR_PTR(-EPROBE_DEFER);
struct reset_controller_dev *r, *rcdev;
struct of_phandle_args args;
int rstc_id;
int ret;
-@@ -186,16 +279,22 @@ struct reset_control *of_reset_control_get_by_index(struct device_node *node,
+@@ -186,16 +279,22 @@ struct reset_control *of_reset_control_g
}
try_module_get(rcdev->owner);
return rstc;
}
-@@ -259,6 +358,10 @@ void reset_control_put(struct reset_control *rstc)
+@@ -259,6 +358,10 @@ void reset_control_put(struct reset_cont
if (IS_ERR(rstc))
return;
module_put(rstc->rcdev->owner);
kfree(rstc);
}
-diff --git a/include/linux/reset-controller.h b/include/linux/reset-controller.h
-index ce6b962..7f2cbd1 100644
--- a/include/linux/reset-controller.h
+++ b/include/linux/reset-controller.h
@@ -31,6 +31,7 @@ struct of_phandle_args;
struct device_node *of_node;
int of_reset_n_cells;
int (*of_xlate)(struct reset_controller_dev *rcdev,
-diff --git a/include/linux/reset.h b/include/linux/reset.h
-index c4c097d..1cca8ce 100644
--- a/include/linux/reset.h
+++ b/include/linux/reset.h
-@@ -11,6 +11,8 @@ int reset_control_reset(struct reset_control *rstc);
+@@ -11,6 +11,8 @@ int reset_control_reset(struct reset_con
int reset_control_assert(struct reset_control *rstc);
int reset_control_deassert(struct reset_control *rstc);
int reset_control_status(struct reset_control *rstc);
drivers/usb/host/ehci-platform.c | 47 +++++++++++++---------
2 files changed, 30 insertions(+), 19 deletions(-)
-diff --git a/Documentation/devicetree/bindings/usb/usb-ehci.txt b/Documentation/devicetree/bindings/usb/usb-ehci.txt
-index a12d601..0701812 100644
--- a/Documentation/devicetree/bindings/usb/usb-ehci.txt
+++ b/Documentation/devicetree/bindings/usb/usb-ehci.txt
@@ -18,7 +18,7 @@ Optional properties:
Example (Sequoia 440EPx):
ehci@e0000300 {
-diff --git a/drivers/usb/host/ehci-platform.c b/drivers/usb/host/ehci-platform.c
-index bd7082f2..6fbf32a 100644
--- a/drivers/usb/host/ehci-platform.c
+++ b/drivers/usb/host/ehci-platform.c
@@ -39,11 +39,12 @@
struct phy **phys;
int num_phys;
bool reset_on_resume;
-@@ -149,7 +150,7 @@ static int ehci_platform_probe(struct platform_device *dev)
+@@ -149,7 +150,7 @@ static int ehci_platform_probe(struct pl
struct usb_ehci_pdata *pdata = dev_get_platdata(&dev->dev);
struct ehci_platform_priv *priv;
struct ehci_hcd *ehci;
if (usb_disabled())
return -ENODEV;
-@@ -232,18 +233,24 @@ static int ehci_platform_probe(struct platform_device *dev)
+@@ -232,18 +233,24 @@ static int ehci_platform_probe(struct pl
break;
}
}
}
if (pdata->big_endian_desc)
-@@ -300,8 +307,10 @@ static int ehci_platform_probe(struct platform_device *dev)
+@@ -302,8 +309,10 @@ err_power:
if (pdata->power_off)
pdata->power_off(dev);
err_reset:
err_put_clks:
while (--clk >= 0)
clk_put(priv->clks[clk]);
-@@ -319,15 +328,17 @@ static int ehci_platform_remove(struct platform_device *dev)
+@@ -321,15 +330,17 @@ static int ehci_platform_remove(struct p
struct usb_hcd *hcd = platform_get_drvdata(dev);
struct usb_ehci_pdata *pdata = dev_get_platdata(&dev->dev);
struct ehci_platform_priv *priv = hcd_to_ehci_priv(hcd);
drivers/usb/host/ohci-platform.c | 49 +++++++++++++---------
2 files changed, 30 insertions(+), 21 deletions(-)
-diff --git a/Documentation/devicetree/bindings/usb/usb-ohci.txt b/Documentation/devicetree/bindings/usb/usb-ohci.txt
-index 19233b7..9df4569 100644
--- a/Documentation/devicetree/bindings/usb/usb-ohci.txt
+++ b/Documentation/devicetree/bindings/usb/usb-ohci.txt
@@ -14,7 +14,7 @@ Optional properties:
Example:
-diff --git a/drivers/usb/host/ohci-platform.c b/drivers/usb/host/ohci-platform.c
-index c2669f18..7d8bbc4 100644
--- a/drivers/usb/host/ohci-platform.c
+++ b/drivers/usb/host/ohci-platform.c
@@ -33,11 +33,12 @@
struct phy **phys;
int num_phys;
};
-@@ -117,7 +118,7 @@ static int ohci_platform_probe(struct platform_device *dev)
+@@ -117,7 +118,7 @@ static int ohci_platform_probe(struct pl
struct usb_ohci_pdata *pdata = dev_get_platdata(&dev->dev);
struct ohci_platform_priv *priv;
struct ohci_hcd *ohci;
if (usb_disabled())
return -ENODEV;
-@@ -195,19 +196,23 @@ static int ohci_platform_probe(struct platform_device *dev)
+@@ -195,19 +196,23 @@ static int ohci_platform_probe(struct pl
break;
}
}
}
if (pdata->big_endian_desc)
-@@ -265,8 +270,10 @@ static int ohci_platform_probe(struct platform_device *dev)
+@@ -265,8 +270,10 @@ err_power:
if (pdata->power_off)
pdata->power_off(dev);
err_reset:
err_put_clks:
while (--clk >= 0)
clk_put(priv->clks[clk]);
-@@ -284,15 +291,17 @@ static int ohci_platform_remove(struct platform_device *dev)
+@@ -284,15 +291,17 @@ static int ohci_platform_remove(struct p
struct usb_hcd *hcd = platform_get_drvdata(dev);
struct usb_ohci_pdata *pdata = dev_get_platdata(&dev->dev);
struct ohci_platform_priv *priv = hcd_to_ohci_priv(hcd);
arch/arm/boot/dts/sun7i-a20-pcduino3.dts | 5 +++++
1 file changed, 5 insertions(+)
-diff --git a/arch/arm/boot/dts/sun7i-a20-pcduino3.dts b/arch/arm/boot/dts/sun7i-a20-pcduino3.dts
-index 861a4a6..067f365 100644
--- a/arch/arm/boot/dts/sun7i-a20-pcduino3.dts
+++ b/arch/arm/boot/dts/sun7i-a20-pcduino3.dts
@@ -111,6 +111,11 @@
2 files changed, 298 insertions(+)
create mode 100644 arch/arm/boot/dts/sun7i-a20-lamobo-r1.dts
-diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
-index cc7309b..6f8deac 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
-@@ -639,6 +639,7 @@ dtb-$(CONFIG_MACH_SUN7I) += \
+@@ -638,6 +638,7 @@ dtb-$(CONFIG_MACH_SUN7I) += \
sun7i-a20-cubietruck.dtb \
sun7i-a20-hummingbird.dtb \
sun7i-a20-i12-tvbox.dtb \
sun7i-a20-m3.dtb \
sun7i-a20-mk808c.dtb \
sun7i-a20-olimex-som-evb.dtb \
-diff --git a/arch/arm/boot/dts/sun7i-a20-lamobo-r1.dts b/arch/arm/boot/dts/sun7i-a20-lamobo-r1.dts
-new file mode 100644
-index 0000000..975b0b2
--- /dev/null
+++ b/arch/arm/boot/dts/sun7i-a20-lamobo-r1.dts
@@ -0,0 +1,297 @@
--- a/scripts/Makefile.lib
+++ b/scripts/Makefile.lib
-@@ -324,7 +324,7 @@
+@@ -324,7 +324,7 @@ cmd_bzip2 = (cat $(filter-out FORCE,$^)
quiet_cmd_lzma = LZMA $@
cmd_lzma = (cat $(filter-out FORCE,$^) | \
--- a/drivers/mfd/rdc321x-southbridge.c
+++ b/drivers/mfd/rdc321x-southbridge.c
-@@ -85,6 +85,8 @@
+@@ -85,6 +85,8 @@ static int rdc321x_sb_probe(struct pci_d
rdc321x_gpio_pdata.sb_pdev = pdev;
rdc321x_wdt_pdata.sb_pdev = pdev;