]> Git Repo - linux.git/commitdiff
Merge tag 'for-arm-soc-cleanup' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorOlof Johansson <[email protected]>
Tue, 12 Feb 2013 22:59:50 +0000 (14:59 -0800)
committerOlof Johansson <[email protected]>
Tue, 12 Feb 2013 23:00:14 +0000 (15:00 -0800)
From Linus Walleij:
Two fixes for broken <mach/id.h> cleanup.

* tag 'for-arm-soc-cleanup' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson:
  mfd: db8500-prcmu: update resource passing
  drivers/db8500-cpufreq: delete dangling include

Signed-off-by: Olof Johansson <[email protected]>
1  2 
arch/arm/mach-ux500/board-mop500.c
arch/arm/mach-ux500/cpu-db8500.c
drivers/mfd/db8500-prcmu.c

index 0e928d28175914daddaf63f496b29e8139be1d9f,6cb1407961e04a03e33f52ddc1b848f1aac840d9..bf04b783b6d0e470df91e05650b8e54541470f7e
@@@ -40,6 -40,7 +40,6 @@@
  
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
 -#include <asm/hardware/gic.h>
  
  #include <mach/hardware.h>
  #include <mach/setup.h>
@@@ -214,7 -215,7 +214,7 @@@ static struct platform_device snowball_
        },
  };
  
- static struct ab8500_platform_data ab8500_platdata = {
+ struct ab8500_platform_data ab8500_platdata = {
        .irq_base       = MOP500_AB8500_IRQ_BASE,
        .regulator_reg_init = ab8500_regulator_reg_init,
        .num_regulator_reg_init = ARRAY_SIZE(ab8500_regulator_reg_init),
@@@ -650,6 -651,7 +650,7 @@@ static void __init mop500_init_machine(
        int i2c0_devs;
        int i;
  
+       platform_device_register(&db8500_prcmu_device);
        mop500_gpio_keys[0].gpio = GPIO_PROX_SENSOR;
  
        mop500_pinmaps_init();
@@@ -684,6 -686,7 +685,7 @@@ static void __init snowball_init_machin
        struct device *parent = NULL;
        int i;
  
+       platform_device_register(&db8500_prcmu_device);
        snowball_pinmaps_init();
        parent = u8500_init_devices(&ab8500_platdata);
  
@@@ -709,6 -712,7 +711,7 @@@ static void __init hrefv60_init_machine
        int i2c0_devs;
        int i;
  
+       platform_device_register(&db8500_prcmu_device);
        /*
         * The HREFv60 board removed a GPIO expander and routed
         * all these GPIO pins to the internal GPIO controller
@@@ -750,7 -754,8 +753,7 @@@ MACHINE_START(U8500, "ST-Ericsson MOP50
        .map_io         = u8500_map_io,
        .init_irq       = ux500_init_irq,
        /* we re-use nomadik timer here */
 -      .timer          = &ux500_timer,
 -      .handle_irq     = gic_handle_irq,
 +      .init_time      = ux500_timer_init,
        .init_machine   = mop500_init_machine,
        .init_late      = ux500_init_late,
  MACHINE_END
@@@ -759,7 -764,8 +762,7 @@@ MACHINE_START(U8520, "ST-Ericsson U852
        .atag_offset    = 0x100,
        .map_io         = u8500_map_io,
        .init_irq       = ux500_init_irq,
 -      .timer          = &ux500_timer,
 -      .handle_irq     = gic_handle_irq,
 +      .init_time      = ux500_timer_init,
        .init_machine   = mop500_init_machine,
        .init_late      = ux500_init_late,
  MACHINE_END
@@@ -769,7 -775,8 +772,7 @@@ MACHINE_START(HREFV60, "ST-Ericsson U85
        .smp            = smp_ops(ux500_smp_ops),
        .map_io         = u8500_map_io,
        .init_irq       = ux500_init_irq,
 -      .timer          = &ux500_timer,
 -      .handle_irq     = gic_handle_irq,
 +      .init_time      = ux500_timer_init,
        .init_machine   = hrefv60_init_machine,
        .init_late      = ux500_init_late,
  MACHINE_END
@@@ -780,7 -787,8 +783,7 @@@ MACHINE_START(SNOWBALL, "Calao Systems 
        .map_io         = u8500_map_io,
        .init_irq       = ux500_init_irq,
        /* we re-use nomadik timer here */
 -      .timer          = &ux500_timer,
 -      .handle_irq     = gic_handle_irq,
 +      .init_time      = ux500_timer_init,
        .init_machine   = snowball_init_machine,
        .init_late      = NULL,
  MACHINE_END
index d614d7150dcb50d2c268dce442fe437412c57128,8501970641bc582087853707d453cba2152f6696..6f42b6087df52d2b2363d292e0179ce6c3f0790f
@@@ -27,6 -27,7 +27,6 @@@
  #include <asm/pmu.h>
  #include <asm/mach/map.h>
  #include <asm/mach/arch.h>
 -#include <asm/hardware/gic.h>
  
  #include <mach/hardware.h>
  #include <mach/setup.h>
@@@ -138,14 -139,9 +138,9 @@@ static struct platform_device db8500_pm
        .dev.platform_data      = &db8500_pmu_platdata,
  };
  
- static struct platform_device db8500_prcmu_device = {
-       .name                   = "db8500-prcmu",
- };
  static struct platform_device *platform_devs[] __initdata = {
        &u8500_dma40_device,
        &db8500_pmu_device,
-       &db8500_prcmu_device,
  };
  
  static resource_size_t __initdata db8500_gpio_base[] = {
@@@ -285,9 -281,10 +280,11 @@@ static struct of_dev_auxdata u8500_auxd
        OF_DEV_AUXDATA("st,nomadik-i2c", 0x80128000, "nmk-i2c.2", NULL),
        OF_DEV_AUXDATA("st,nomadik-i2c", 0x80110000, "nmk-i2c.3", NULL),
        OF_DEV_AUXDATA("st,nomadik-i2c", 0x8012a000, "nmk-i2c.4", NULL),
+       OF_DEV_AUXDATA("stericsson,db8500-prcmu", 0x80157000, "db8500-prcmu",
+                       &db8500_prcmu_pdata),
        /* Requires device name bindings. */
 -      OF_DEV_AUXDATA("stericsson,nmk_pinctrl", 0, "pinctrl-db8500", NULL),
 +      OF_DEV_AUXDATA("stericsson,nmk_pinctrl", U8500_PRCMU_BASE,
 +              "pinctrl-db8500", NULL),
        /* Requires clock name and DMA bindings. */
        OF_DEV_AUXDATA("stericsson,ux500-msp-i2s", 0x80123000,
                "ux500-msp-i2s.0", &msp0_platform_data),
@@@ -342,7 -339,8 +339,7 @@@ DT_MACHINE_START(U8500_DT, "ST-Ericsso
        .map_io         = u8500_map_io,
        .init_irq       = ux500_init_irq,
        /* we re-use nomadik timer here */
 -      .timer          = &ux500_timer,
 -      .handle_irq     = gic_handle_irq,
 +      .init_time      = ux500_timer_init,
        .init_machine   = u8500_init_machine,
        .init_late      = NULL,
        .dt_compat      = stericsson_dt_platform_compat,
index 6658f3cb08321e94e27a971eb699e2e2a122eadd,eba03d2329dd7578ad107d5594efe9d6b085337c..1192518e1aca510637b8172562492bb2fee93d52
  #include <linux/fs.h>
  #include <linux/platform_device.h>
  #include <linux/uaccess.h>
 +#include <linux/irqchip/arm-gic.h>
  #include <linux/mfd/core.h>
  #include <linux/mfd/dbx500-prcmu.h>
  #include <linux/mfd/abx500/ab8500.h>
  #include <linux/regulator/db8500-prcmu.h>
  #include <linux/regulator/machine.h>
  #include <linux/cpufreq.h>
 -#include <asm/hardware/gic.h>
  #include <mach/hardware.h>
  #include <mach/irqs.h>
  #include <mach/db8500-regs.h>
  #include "dbx500-prcmu-regs.h"
  
- /* Offset for the firmware version within the TCPM */
- #define PRCMU_FW_VERSION_OFFSET 0xA4
  /* Index of different voltages to be used when accessing AVSData */
  #define PRCM_AVS_BASE         0x2FC
  #define PRCM_AVS_VBB_RET      (PRCM_AVS_BASE + 0x0)
@@@ -2522,7 -2519,7 +2519,7 @@@ static bool read_mailbox_0(void
  
                for (n = 0; n < NUM_PRCMU_WAKEUPS; n++) {
                        if (ev & prcmu_irq_bit[n])
 -                              generic_handle_irq(IRQ_PRCMU_BASE + n);
 +                              generic_handle_irq(irq_find_mapping(db8500_irq_domain, n));
                }
                r = true;
                break;
@@@ -2704,21 -2701,43 +2701,43 @@@ static struct irq_chip prcmu_irq_chip 
        .irq_unmask     = prcmu_irq_unmask,
  };
  
- static char *fw_project_name(u8 project)
+ static __init char *fw_project_name(u32 project)
  {
        switch (project) {
        case PRCMU_FW_PROJECT_U8500:
                return "U8500";
-       case PRCMU_FW_PROJECT_U8500_C2:
-               return "U8500 C2";
+       case PRCMU_FW_PROJECT_U8400:
+               return "U8400";
        case PRCMU_FW_PROJECT_U9500:
                return "U9500";
-       case PRCMU_FW_PROJECT_U9500_C2:
-               return "U9500 C2";
+       case PRCMU_FW_PROJECT_U8500_MBB:
+               return "U8500 MBB";
+       case PRCMU_FW_PROJECT_U8500_C1:
+               return "U8500 C1";
+       case PRCMU_FW_PROJECT_U8500_C2:
+               return "U8500 C2";
+       case PRCMU_FW_PROJECT_U8500_C3:
+               return "U8500 C3";
+       case PRCMU_FW_PROJECT_U8500_C4:
+               return "U8500 C4";
+       case PRCMU_FW_PROJECT_U9500_MBL:
+               return "U9500 MBL";
+       case PRCMU_FW_PROJECT_U8500_MBL:
+               return "U8500 MBL";
+       case PRCMU_FW_PROJECT_U8500_MBL2:
+               return "U8500 MBL2";
        case PRCMU_FW_PROJECT_U8520:
-               return "U8520";
+               return "U8520 MBL";
        case PRCMU_FW_PROJECT_U8420:
                return "U8420";
+       case PRCMU_FW_PROJECT_U9540:
+               return "U9540";
+       case PRCMU_FW_PROJECT_A9420:
+               return "A9420";
+       case PRCMU_FW_PROJECT_L8540:
+               return "L8540";
+       case PRCMU_FW_PROJECT_L8580:
+               return "L8580";
        default:
                return "Unknown";
        }
@@@ -2735,14 -2754,13 +2754,14 @@@ static int db8500_irq_map(struct irq_do
  }
  
  static struct irq_domain_ops db8500_irq_ops = {
 -        .map    = db8500_irq_map,
 -        .xlate  = irq_domain_xlate_twocell,
 +      .map    = db8500_irq_map,
 +      .xlate  = irq_domain_xlate_twocell,
  };
  
  static int db8500_irq_init(struct device_node *np)
  {
 -      int irq_base = -1;
 +      int irq_base = 0;
 +      int i;
  
        /* In the device tree case, just take some IRQs */
        if (!np)
                return -ENOSYS;
        }
  
 +      /* All wakeups will be used, so create mappings for all */
 +      for (i = 0; i < NUM_PRCMU_WAKEUPS; i++)
 +              irq_create_mapping(db8500_irq_domain, i);
 +
        return 0;
  }
  
- void __init db8500_prcmu_early_init(void)
+ static void dbx500_fw_version_init(struct platform_device *pdev,
+                           u32 version_offset)
  {
-       if (cpu_is_u8500v2() || cpu_is_u9540()) {
-               void *tcpm_base = ioremap_nocache(U8500_PRCMU_TCPM_BASE, SZ_4K);
-               if (tcpm_base != NULL) {
-                       u32 version;
-                       version = readl(tcpm_base + PRCMU_FW_VERSION_OFFSET);
-                       fw_info.version.project = version & 0xFF;
-                       fw_info.version.api_version = (version >> 8) & 0xFF;
-                       fw_info.version.func_version = (version >> 16) & 0xFF;
-                       fw_info.version.errata = (version >> 24) & 0xFF;
-                       fw_info.valid = true;
-                       pr_info("PRCMU firmware: %s, version %d.%d.%d\n",
-                               fw_project_name(fw_info.version.project),
-                               (version >> 8) & 0xFF, (version >> 16) & 0xFF,
-                               (version >> 24) & 0xFF);
-                       iounmap(tcpm_base);
-               }
+       struct resource *res;
+       void __iomem *tcpm_base;
  
-               if (cpu_is_u9540())
-                       tcdm_base = ioremap_nocache(U8500_PRCMU_TCDM_BASE,
-                                               SZ_4K + SZ_8K) + SZ_8K;
-               else
-                       tcdm_base = __io_address(U8500_PRCMU_TCDM_BASE);
-       } else {
-               pr_err("prcmu: Unsupported chip version\n");
-               BUG();
+       res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
+                                          "prcmu-tcpm");
+       if (!res) {
+               dev_err(&pdev->dev,
+                       "Error: no prcmu tcpm memory region provided\n");
+               return;
+       }
+       tcpm_base = ioremap(res->start, resource_size(res));
+       if (tcpm_base != NULL) {
+               u32 version;
+               version = readl(tcpm_base + version_offset);
+               fw_info.version.project = (version & 0xFF);
+               fw_info.version.api_version = (version >> 8) & 0xFF;
+               fw_info.version.func_version = (version >> 16) & 0xFF;
+               fw_info.version.errata = (version >> 24) & 0xFF;
+               strncpy(fw_info.version.project_name,
+                       fw_project_name(fw_info.version.project),
+                       PRCMU_FW_PROJECT_NAME_LEN);
+               fw_info.valid = true;
+               pr_info("PRCMU firmware: %s(%d), version %d.%d.%d\n",
+                       fw_info.version.project_name,
+                       fw_info.version.project,
+                       fw_info.version.api_version,
+                       fw_info.version.func_version,
+                       fw_info.version.errata);
+               iounmap(tcpm_base);
        }
-       tcdm_base = __io_address(U8500_PRCMU_TCDM_BASE);
+ }
  
+ void __init db8500_prcmu_early_init(void)
+ {
        spin_lock_init(&mb0_transfer.lock);
        spin_lock_init(&mb0_transfer.dbb_irqs_lock);
        mutex_init(&mb0_transfer.ac_wake_lock);
@@@ -3104,20 -3125,30 +3130,30 @@@ static void db8500_prcmu_update_cpufreq
   */
  static int db8500_prcmu_probe(struct platform_device *pdev)
  {
-       struct ab8500_platform_data *ab8500_platdata = pdev->dev.platform_data;
        struct device_node *np = pdev->dev.of_node;
+       struct prcmu_pdata *pdata = dev_get_platdata(&pdev->dev);
        int irq = 0, err = 0, i;
+       struct resource *res;
  
        init_prcm_registers();
  
+       dbx500_fw_version_init(pdev, pdata->version_offset);
+       res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "prcmu-tcdm");
+       if (!res) {
+               dev_err(&pdev->dev, "no prcmu tcdm region provided\n");
+               return -ENOENT;
+       }
+       tcdm_base = devm_ioremap(&pdev->dev, res->start,
+                       resource_size(res));
        /* Clean up the mailbox interrupts after pre-kernel code. */
        writel(ALL_MBOX_BITS, PRCM_ARM_IT1_CLR);
  
-       if (np)
-               irq = platform_get_irq(pdev, 0);
-       if (!np || irq <= 0)
-               irq = IRQ_DB8500_PRCMU1;
+       irq = platform_get_irq(pdev, 0);
+       if (irq <= 0) {
+               dev_err(&pdev->dev, "no prcmu irq provided\n");
+               return -ENOENT;
+       }
  
        err = request_threaded_irq(irq, prcmu_irq_handler,
                prcmu_irq_thread_fn, IRQF_NO_SUSPEND, "prcmu", NULL);
  
        for (i = 0; i < ARRAY_SIZE(db8500_prcmu_devs); i++) {
                if (!strcmp(db8500_prcmu_devs[i].name, "ab8500-core")) {
-                       db8500_prcmu_devs[i].platform_data = ab8500_platdata;
+                       db8500_prcmu_devs[i].platform_data = pdata->ab_platdata;
                        db8500_prcmu_devs[i].pdata_size = sizeof(struct ab8500_platform_data);
                }
        }
This page took 0.083263 seconds and 4 git commands to generate.