Commit 3262b82d authored by Arnd Bergmann's avatar Arnd Bergmann

Merge tag 'amlogic-drivers' of...

Merge tag 'amlogic-drivers' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/khilman/linux-amlogic into next/drivers

Pull "Amlogic driver updates for v4.17" from Kevin Hilman:

- socinfo: add more IDs for newer SoC detection
- firmware: update init to use module_platform_driver_probe
- soc: mix. VPU power controller fixes

* tag 'amlogic-drivers' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/khilman/linux-amlogic:
  amlogic: meson-gx-socinfo: Update soc ids
  firmware: meson-sm: rework meson_sm_init to use module_platform_driver_probe
  meson-gx-socinfo: make local function meson_gx_socinfo_init static
  meson-mx-socinfo: Make local function meson_mx_socinfo_init() static
  soc: amlogic: meson-gx-pwrc-vpu: fix error on shutdown when domain is powered off
  soc: amlogic: meson-gx-pwrc-vpu: don't print error message on probe deferral
parents 03836dd0 f842c41a
...@@ -17,8 +17,10 @@ ...@@ -17,8 +17,10 @@
#include <linux/arm-smccc.h> #include <linux/arm-smccc.h>
#include <linux/bug.h> #include <linux/bug.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/module.h>
#include <linux/of.h> #include <linux/of.h>
#include <linux/of_device.h> #include <linux/of_device.h>
#include <linux/platform_device.h>
#include <linux/printk.h> #include <linux/printk.h>
#include <linux/types.h> #include <linux/types.h>
#include <linux/sizes.h> #include <linux/sizes.h>
...@@ -217,21 +219,11 @@ static const struct of_device_id meson_sm_ids[] = { ...@@ -217,21 +219,11 @@ static const struct of_device_id meson_sm_ids[] = {
{ /* sentinel */ }, { /* sentinel */ },
}; };
int __init meson_sm_init(void) static int __init meson_sm_probe(struct platform_device *pdev)
{ {
const struct meson_sm_chip *chip; const struct meson_sm_chip *chip;
const struct of_device_id *matched_np;
struct device_node *np;
np = of_find_matching_node_and_match(NULL, meson_sm_ids, &matched_np); chip = of_match_device(meson_sm_ids, &pdev->dev)->data;
if (!np)
return -ENODEV;
chip = matched_np->data;
if (!chip) {
pr_err("unable to setup secure-monitor data\n");
goto out;
}
if (chip->cmd_shmem_in_base) { if (chip->cmd_shmem_in_base) {
fw.sm_shmem_in_base = meson_sm_map_shmem(chip->cmd_shmem_in_base, fw.sm_shmem_in_base = meson_sm_map_shmem(chip->cmd_shmem_in_base,
...@@ -257,4 +249,11 @@ int __init meson_sm_init(void) ...@@ -257,4 +249,11 @@ int __init meson_sm_init(void)
out: out:
return -EINVAL; return -EINVAL;
} }
device_initcall(meson_sm_init);
static struct platform_driver meson_sm_driver = {
.driver = {
.name = "meson-sm",
.of_match_table = of_match_ptr(meson_sm_ids),
},
};
module_platform_driver_probe(meson_sm_driver, meson_sm_probe);
...@@ -184,7 +184,8 @@ static int meson_gx_pwrc_vpu_probe(struct platform_device *pdev) ...@@ -184,7 +184,8 @@ static int meson_gx_pwrc_vpu_probe(struct platform_device *pdev)
rstc = devm_reset_control_array_get(&pdev->dev, false, false); rstc = devm_reset_control_array_get(&pdev->dev, false, false);
if (IS_ERR(rstc)) { if (IS_ERR(rstc)) {
dev_err(&pdev->dev, "failed to get reset lines\n"); if (PTR_ERR(rstc) != -EPROBE_DEFER)
dev_err(&pdev->dev, "failed to get reset lines\n");
return PTR_ERR(rstc); return PTR_ERR(rstc);
} }
...@@ -224,7 +225,11 @@ static int meson_gx_pwrc_vpu_probe(struct platform_device *pdev) ...@@ -224,7 +225,11 @@ static int meson_gx_pwrc_vpu_probe(struct platform_device *pdev)
static void meson_gx_pwrc_vpu_shutdown(struct platform_device *pdev) static void meson_gx_pwrc_vpu_shutdown(struct platform_device *pdev)
{ {
meson_gx_pwrc_vpu_power_off(&vpu_hdmi_pd.genpd); bool powered_off;
powered_off = meson_gx_pwrc_vpu_get_power(&vpu_hdmi_pd);
if (!powered_off)
meson_gx_pwrc_vpu_power_off(&vpu_hdmi_pd.genpd);
} }
static const struct of_device_id meson_gx_pwrc_vpu_match_table[] = { static const struct of_device_id meson_gx_pwrc_vpu_match_table[] = {
......
...@@ -33,6 +33,10 @@ static const struct meson_gx_soc_id { ...@@ -33,6 +33,10 @@ static const struct meson_gx_soc_id {
{ "GXL", 0x21 }, { "GXL", 0x21 },
{ "GXM", 0x22 }, { "GXM", 0x22 },
{ "TXL", 0x23 }, { "TXL", 0x23 },
{ "TXLX", 0x24 },
{ "AXG", 0x25 },
{ "GXLX", 0x26 },
{ "TXHD", 0x27 },
}; };
static const struct meson_gx_package_id { static const struct meson_gx_package_id {
...@@ -41,12 +45,18 @@ static const struct meson_gx_package_id { ...@@ -41,12 +45,18 @@ static const struct meson_gx_package_id {
unsigned int pack_id; unsigned int pack_id;
} soc_packages[] = { } soc_packages[] = {
{ "S905", 0x1f, 0 }, { "S905", 0x1f, 0 },
{ "S905H", 0x1f, 0x13 },
{ "S905M", 0x1f, 0x20 }, { "S905M", 0x1f, 0x20 },
{ "S905D", 0x21, 0 }, { "S905D", 0x21, 0 },
{ "S905X", 0x21, 0x80 }, { "S905X", 0x21, 0x80 },
{ "S905W", 0x21, 0xa0 },
{ "S905L", 0x21, 0xc0 }, { "S905L", 0x21, 0xc0 },
{ "S905M2", 0x21, 0xe0 }, { "S905M2", 0x21, 0xe0 },
{ "S912", 0x22, 0 }, { "S912", 0x22, 0 },
{ "962X", 0x24, 0x10 },
{ "962E", 0x24, 0x20 },
{ "A113X", 0x25, 0x37 },
{ "A113D", 0x25, 0x22 },
}; };
static inline unsigned int socinfo_to_major(u32 socinfo) static inline unsigned int socinfo_to_major(u32 socinfo)
...@@ -97,7 +107,7 @@ static const char *socinfo_to_soc_id(u32 socinfo) ...@@ -97,7 +107,7 @@ static const char *socinfo_to_soc_id(u32 socinfo)
return "Unknown"; return "Unknown";
} }
int __init meson_gx_socinfo_init(void) static int __init meson_gx_socinfo_init(void)
{ {
struct soc_device_attribute *soc_dev_attr; struct soc_device_attribute *soc_dev_attr;
struct soc_device *soc_dev; struct soc_device *soc_dev;
......
...@@ -104,7 +104,7 @@ static const struct of_device_id meson_mx_socinfo_analog_top_ids[] = { ...@@ -104,7 +104,7 @@ static const struct of_device_id meson_mx_socinfo_analog_top_ids[] = {
{ /* sentinel */ } { /* sentinel */ }
}; };
int __init meson_mx_socinfo_init(void) static int __init meson_mx_socinfo_init(void)
{ {
struct soc_device_attribute *soc_dev_attr; struct soc_device_attribute *soc_dev_attr;
struct soc_device *soc_dev; struct soc_device *soc_dev;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment