diff --git a/config/kernel/linux-rockchip64-current.config b/config/kernel/linux-rockchip64-current.config old mode 100644 new mode 100755 index c9b60bb19..ffb94d08a --- a/config/kernel/linux-rockchip64-current.config +++ b/config/kernel/linux-rockchip64-current.config @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm64 5.4.27 Kernel Configuration +# Linux/arm64 5.4.30 Kernel Configuration # # @@ -823,6 +823,7 @@ CONFIG_NET=y CONFIG_COMPAT_NETLINK_MESSAGES=y CONFIG_NET_INGRESS=y CONFIG_NET_EGRESS=y +CONFIG_NET_REDIRECT=y CONFIG_SKB_EXTENSIONS=y # @@ -2682,6 +2683,8 @@ CONFIG_RTL8822BU=m CONFIG_RTL8188EU=m CONFIG_RTL8821CU=m CONFIG_88XXAU=m +CONFIG_RTL8189FS=m +CONFIG_RTL8189ES=m CONFIG_WLAN_VENDOR_ZYDAS=y # CONFIG_USB_ZD1201 is not set # CONFIG_ZD1211RW is not set @@ -3712,6 +3715,7 @@ CONFIG_REGULATOR_MAX77650=m # CONFIG_REGULATOR_MAX8952 is not set # CONFIG_REGULATOR_MAX8973 is not set CONFIG_REGULATOR_MCP16502=m +CONFIG_REGULATOR_MP8859=m # CONFIG_REGULATOR_MT6311 is not set # CONFIG_REGULATOR_PFUZE100 is not set # CONFIG_REGULATOR_PV88060 is not set diff --git a/patch/kernel/rockchip64-current/add-mp8859-regulator.patch b/patch/kernel/rockchip64-current/add-mp8859-regulator.patch new file mode 100644 index 000000000..a9d98041f --- /dev/null +++ b/patch/kernel/rockchip64-current/add-mp8859-regulator.patch @@ -0,0 +1,178 @@ +From 4444a1c10069e2f371fa497ba22feafafed5aada Mon Sep 17 00:00:00 2001 +From: Markus Reichl +Date: Mon, 6 Jan 2020 22:16:24 +0100 +Subject: [PATCH] regulator: mp8859: add driver + +The MP8859 from Monolithic Power Systems is a single output DC/DC +converter. The voltage can be controlled via I2C. + +Signed-off-by: Markus Reichl +Link: https://lore.kernel.org/r/20200106211633.2882-2-m.reichl@fivetechno.de +Signed-off-by: Mark Brown +--- + drivers/regulator/mp8859.c | 156 +++++++++++++++++++++++++++++++++++++ + 1 file changed, 156 insertions(+) + create mode 100644 drivers/regulator/mp8859.c + +diff --git a/drivers/regulator/mp8859.c b/drivers/regulator/mp8859.c +new file mode 100644 +index 0000000000000..e804a52673017 +--- /dev/null ++++ b/drivers/regulator/mp8859.c +@@ -0,0 +1,156 @@ ++// SPDX-License-Identifier: GPL-2.0 ++// ++// Copyright (c) 2019 five technologies GmbH ++// Author: Markus Reichl ++ ++#include ++#include ++#include ++#include ++#include ++ ++ ++#define VOL_MIN_IDX 0x00 ++#define VOL_MAX_IDX 0x7ff ++ ++/* Register definitions */ ++#define MP8859_VOUT_L_REG 0 //3 lo Bits ++#define MP8859_VOUT_H_REG 1 //8 hi Bits ++#define MP8859_VOUT_GO_REG 2 ++#define MP8859_IOUT_LIM_REG 3 ++#define MP8859_CTL1_REG 4 ++#define MP8859_CTL2_REG 5 ++#define MP8859_RESERVED1_REG 6 ++#define MP8859_RESERVED2_REG 7 ++#define MP8859_RESERVED3_REG 8 ++#define MP8859_STATUS_REG 9 ++#define MP8859_INTERRUPT_REG 0x0A ++#define MP8859_MASK_REG 0x0B ++#define MP8859_ID1_REG 0x0C ++#define MP8859_MFR_ID_REG 0x27 ++#define MP8859_DEV_ID_REG 0x28 ++#define MP8859_IC_REV_REG 0x29 ++ ++#define MP8859_MAX_REG 0x29 ++ ++#define MP8859_GO_BIT 0x01 ++ ++ ++static int mp8859_set_voltage_sel(struct regulator_dev *rdev, unsigned int sel) ++{ ++ int ret; ++ ++ ret = regmap_write(rdev->regmap, MP8859_VOUT_L_REG, sel & 0x7); ++ ++ if (ret) ++ return ret; ++ ret = regmap_write(rdev->regmap, MP8859_VOUT_H_REG, sel >> 3); ++ ++ if (ret) ++ return ret; ++ ret = regmap_update_bits(rdev->regmap, MP8859_VOUT_GO_REG, ++ MP8859_GO_BIT, 1); ++ return ret; ++} ++ ++static int mp8859_get_voltage_sel(struct regulator_dev *rdev) ++{ ++ unsigned int val_tmp; ++ unsigned int val; ++ int ret; ++ ++ ret = regmap_read(rdev->regmap, MP8859_VOUT_H_REG, &val_tmp); ++ ++ if (ret) ++ return ret; ++ val = val_tmp << 3; ++ ++ ret = regmap_read(rdev->regmap, MP8859_VOUT_L_REG, &val_tmp); ++ ++ if (ret) ++ return ret; ++ val |= val_tmp & 0x07; ++ return val; ++} ++ ++static const struct regulator_linear_range mp8859_dcdc_ranges[] = { ++ REGULATOR_LINEAR_RANGE(0, VOL_MIN_IDX, VOL_MAX_IDX, 10000), ++}; ++ ++static const struct regmap_config mp8859_regmap = { ++ .reg_bits = 8, ++ .val_bits = 8, ++ .max_register = MP8859_MAX_REG, ++ .cache_type = REGCACHE_RBTREE, ++}; ++ ++static const struct regulator_ops mp8859_ops = { ++ .set_voltage_sel = mp8859_set_voltage_sel, ++ .get_voltage_sel = mp8859_get_voltage_sel, ++ .list_voltage = regulator_list_voltage_linear_range, ++}; ++ ++static const struct regulator_desc mp8859_regulators[] = { ++ { ++ .id = 0, ++ .type = REGULATOR_VOLTAGE, ++ .name = "mp8859_dcdc", ++ .of_match = of_match_ptr("mp8859_dcdc"), ++ .n_voltages = VOL_MAX_IDX + 1, ++ .linear_ranges = mp8859_dcdc_ranges, ++ .n_linear_ranges = 1, ++ .ops = &mp8859_ops, ++ .owner = THIS_MODULE, ++ }, ++}; ++ ++static int mp8859_i2c_probe(struct i2c_client *i2c) ++{ ++ int ret; ++ struct regulator_config config = {.dev = &i2c->dev}; ++ struct regmap *regmap = devm_regmap_init_i2c(i2c, &mp8859_regmap); ++ struct regulator_dev *rdev; ++ ++ if (IS_ERR(regmap)) { ++ ret = PTR_ERR(regmap); ++ dev_err(&i2c->dev, "regmap init failed: %d\n", ret); ++ return ret; ++ } ++ rdev = devm_regulator_register(&i2c->dev, &mp8859_regulators[0], ++ &config); ++ ++ if (IS_ERR(rdev)) { ++ ret = PTR_ERR(rdev); ++ dev_err(&i2c->dev, "failed to register %s: %d\n", ++ mp8859_regulators[0].name, ret); ++ return ret; ++ } ++ return 0; ++} ++ ++static const struct of_device_id mp8859_dt_id[] = { ++ {.compatible = "mps,mp8859"}, ++ {}, ++}; ++MODULE_DEVICE_TABLE(of, mp8859_dt_id); ++ ++static const struct i2c_device_id mp8859_i2c_id[] = { ++ { "mp8859", }, ++ { }, ++}; ++MODULE_DEVICE_TABLE(i2c, mp8859_i2c_id); ++ ++static struct i2c_driver mp8859_regulator_driver = { ++ .driver = { ++ .name = "mp8859", ++ .of_match_table = of_match_ptr(mp8859_dt_id), ++ }, ++ .probe_new = mp8859_i2c_probe, ++ .id_table = mp8859_i2c_id, ++}; ++ ++module_i2c_driver(mp8859_regulator_driver); ++ ++MODULE_DESCRIPTION("Monolithic Power Systems MP8859 voltage regulator driver"); ++MODULE_AUTHOR("Markus Reichl "); ++MODULE_LICENSE("GPL v2"); diff --git a/patch/kernel/rockchip64-current/dts-add-mp8859-roc-rk3399-pc.patch b/patch/kernel/rockchip64-current/dts-add-mp8859-roc-rk3399-pc.patch new file mode 100755 index 000000000..564d4211d --- /dev/null +++ b/patch/kernel/rockchip64-current/dts-add-mp8859-roc-rk3399-pc.patch @@ -0,0 +1,87 @@ +diff --git a/arch/arm64/boot/dts/rockchip/rk3399-roc-pc.dts b/arch/arm64/boot/dts/rockchip/rk3399-roc-pc.dts +index efafc680a..9c2cfc428 100644 +--- a/arch/arm64/boot/dts/rockchip/rk3399-roc-pc.dts ++++ b/arch/arm64/boot/dts/rockchip/rk3399-roc-pc.dts +@@ -53,20 +53,6 @@ + regulator-max-microvolt = <5000000>; + }; + +- /* +- * should be placed inside mp8859, but not until mp8859 has +- * its own dt-binding. +- */ +- vcc12v_sys: mp8859-dcdc1 { +- compatible = "regulator-fixed"; +- regulator-name = "vcc12v_sys"; +- regulator-always-on; +- regulator-boot-on; +- regulator-min-microvolt = <12000000>; +- regulator-max-microvolt = <12000000>; +- vin-supply = <&vcc_vbus_typec0>; +- }; +- + /* switched by pmic_sleep */ + vcc1v8_s3: vcca1v8_s3: vcc1v8-s3 { + compatible = "regulator-fixed"; +@@ -85,7 +71,7 @@ + regulator-boot-on; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; +- vin-supply = <&vcc12v_sys>; ++ vin-supply = <&dc_12v>; + }; + vcca_0v9: vcca-0v9 { + compatible = "regulator-fixed"; +@@ -131,7 +117,7 @@ + regulator-boot-on; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; +- vin-supply = <&vcc12v_sys>; ++ vin-supply = <&dc_12v>; + }; + + vdd_log: vdd-log { +@@ -156,7 +142,7 @@ + regulator-boot-on; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; +- vin-supply = <&vcc12v_sys>; ++ vin-supply = <&dc_12v>; + }; + + vcc3v3_pcie: vcc3v3-pcie { +@@ -170,7 +156,7 @@ + regulator-boot-on; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; +- vin-supply = <&vcc12v_sys>; ++ vin-supply = <&dc_12v>; + }; + }; + +@@ -501,6 +487,25 @@ + vbus-supply = <&vcc_vbus_typec0>; + status = "okay"; + }; ++ ++ mp8859: regulator@66 { ++ compatible = "mps,mp8859"; ++ reg = <0x66>; ++ dc_12v: mp8859_dcdc { ++ regulator-name = "dc_12v"; ++ regulator-min-microvolt = <12000000>; ++ regulator-max-microvolt = <12000000>; ++ regulator-always-on; ++ regulator-boot-on; ++ vin-supply = <&vcc_vbus_typec0>; ++ ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <12000000>; ++ }; ++ }; ++ }; ++ + }; + + &i2s0 { \ No newline at end of file diff --git a/patch/kernel/rockchip64-current/mp8859-kbuild-makefile.patch b/patch/kernel/rockchip64-current/mp8859-kbuild-makefile.patch new file mode 100644 index 000000000..d715a0b6e --- /dev/null +++ b/patch/kernel/rockchip64-current/mp8859-kbuild-makefile.patch @@ -0,0 +1,50 @@ +From c66f1cbad53a61f00f8b6273e737d5e560b69ec7 Mon Sep 17 00:00:00 2001 +From: Markus Reichl +Date: Mon, 6 Jan 2020 22:16:25 +0100 +Subject: [PATCH] regulator: mp8859: add config option and build entry + +Add entries for the mp8859 regulator driver +to the build system. + +Signed-off-by: Markus Reichl +Link: https://lore.kernel.org/r/20200106211633.2882-3-m.reichl@fivetechno.de +Signed-off-by: Mark Brown +--- + drivers/regulator/Kconfig | 11 +++++++++++ + drivers/regulator/Makefile | 1 + + 2 files changed, 12 insertions(+) + +diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig +index 56512748a47db..593733a88a618 100644 +--- a/drivers/regulator/Kconfig ++++ b/drivers/regulator/Kconfig +@@ -612,6 +612,17 @@ config REGULATOR_MCP16502 + through the regulator interface. In addition it enables + suspend-to-ram/standby transition. + ++config REGULATOR_MP8859 ++ tristate "MPS MP8859 regulator driver" ++ depends on I2C ++ select REGMAP_I2C ++ help ++ Say y here to support the MP8859 voltage regulator. This driver ++ supports basic operations (get/set voltage) through the regulator ++ interface. ++ Say M here if you want to include support for the regulator as a ++ module. The module will be named "mp8859". ++ + config REGULATOR_MT6311 + tristate "MediaTek MT6311 PMIC" + depends on I2C +diff --git a/drivers/regulator/Makefile b/drivers/regulator/Makefile +index 9eccf93bc3ab4..8ba8e5deebbdd 100644 +--- a/drivers/regulator/Makefile ++++ b/drivers/regulator/Makefile +@@ -78,6 +78,7 @@ obj-$(CONFIG_REGULATOR_MC13783) += mc13783-regulator.o + obj-$(CONFIG_REGULATOR_MC13892) += mc13892-regulator.o + obj-$(CONFIG_REGULATOR_MC13XXX_CORE) += mc13xxx-regulator-core.o + obj-$(CONFIG_REGULATOR_MCP16502) += mcp16502.o ++obj-$(CONFIG_REGULATOR_MP8859) += mp8859.o + obj-$(CONFIG_REGULATOR_MT6311) += mt6311-regulator.o + obj-$(CONFIG_REGULATOR_MT6323) += mt6323-regulator.o + obj-$(CONFIG_REGULATOR_MT6358) += mt6358-regulator.o