Merge tag 'ux500-cleanup-bundle' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorArnd Bergmann <arnd@arndb.de>
Thu, 14 Jul 2016 13:23:19 +0000 (15:23 +0200)
committerArnd Bergmann <arnd@arndb.de>
Thu, 14 Jul 2016 13:23:19 +0000 (15:23 +0200)
Merge "Ux500 cleanups from Arnd" from Linus Walleij:

This is a set of cleanups for the Ux500 that reduce the number
of machine-local files and boardfile-type data for regulators
and ASoC.

* tag 'ux500-cleanup-bundle' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson:
  ARM: ux500: consolidate base platform files
  ARM: ux500: move soc_id driver to drivers/soc
  ARM: ux500: call ux500_setup_id later
  ARM: ux500: consolidate soc_device code in id.c
  ARM: ux500: remove cpu_is_u* helpers
  ARM: ux500: use CLK_OF_DECLARE()
  ARM: ux500: move l2x0 init to .init_irq
  mfd: db8500 stop passing around platform data
  ASoC: ab8500-codec: remove platform data based probe
  ARM: ux500: move ab8500_regulator_plat_data into driver
  ARM: ux500: remove unused regulator data

27 files changed:
MAINTAINERS
arch/arm/mach-ux500/Makefile
arch/arm/mach-ux500/board-mop500-regulators.c [deleted file]
arch/arm/mach-ux500/board-mop500-regulators.h [deleted file]
arch/arm/mach-ux500/cache-l2x0.c [deleted file]
arch/arm/mach-ux500/cpu-db8500.c
arch/arm/mach-ux500/cpu.c [deleted file]
arch/arm/mach-ux500/id.c [deleted file]
arch/arm/mach-ux500/id.h [deleted file]
arch/arm/mach-ux500/platsmp.c
arch/arm/mach-ux500/setup.h
drivers/clk/ux500/u8500_of_clk.c
drivers/clk/ux500/u8540_clk.c
drivers/clk/ux500/u9540_clk.c
drivers/mfd/ab8500-core.c
drivers/mfd/ab8500-sysctrl.c
drivers/mfd/db8500-prcmu.c
drivers/regulator/ab8500-ext.c
drivers/soc/Kconfig
drivers/soc/Makefile
drivers/soc/ux500/Kconfig [new file with mode: 0644]
drivers/soc/ux500/Makefile [new file with mode: 0644]
drivers/soc/ux500/ux500-soc-id.c [new file with mode: 0644]
include/linux/mfd/abx500/ab8500-sysctrl.h
include/linux/mfd/dbx500-prcmu.h
include/linux/platform_data/clk-ux500.h [deleted file]
sound/soc/codecs/ab8500-codec.c

index f5d7f05..88c8e3a 100644 (file)
@@ -1822,7 +1822,6 @@ L:        linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 T:     git git://git.linaro.org/people/ulfh/clk.git
 S:     Maintained
 F:     drivers/clk/ux500/
-F:     include/linux/platform_data/clk-ux500.h
 
 ARM/VERSATILE EXPRESS PLATFORM
 M:     Liviu Dudau <liviu.dudau@arm.com>
index edfff1a..56d0eb6 100644 (file)
@@ -2,11 +2,9 @@
 # Makefile for the linux kernel, U8500 machine.
 #
 
-obj-y                          := cpu.o id.o pm.o
-obj-$(CONFIG_CACHE_L2X0)       += cache-l2x0.o
+obj-y                          := pm.o
 obj-$(CONFIG_UX500_SOC_DB8500) += cpu-db8500.o
-obj-$(CONFIG_MACH_MOP500)      += board-mop500-regulators.o \
-                               board-mop500-audio.o
+obj-$(CONFIG_MACH_MOP500)      += board-mop500-audio.o
 obj-$(CONFIG_SMP)              += platsmp.o
 obj-$(CONFIG_HOTPLUG_CPU)      += hotplug.o
 obj-$(CONFIG_PM_GENERIC_DOMAINS) += pm_domains.o
diff --git a/arch/arm/mach-ux500/board-mop500-regulators.c b/arch/arm/mach-ux500/board-mop500-regulators.c
deleted file mode 100644 (file)
index 32d744e..0000000
+++ /dev/null
@@ -1,1065 +0,0 @@
-/*
- * Copyright (C) ST-Ericsson SA 2010
- *
- * License Terms: GNU General Public License v2
- *
- * Authors: Sundar Iyer <sundar.iyer@stericsson.com>
- *          Bengt Jonsson <bengt.g.jonsson@stericsson.com>
- *          Daniel Willerud <daniel.willerud@stericsson.com>
- *
- * MOP500 board specific initialization for regulators
- */
-#include <linux/kernel.h>
-#include <linux/regulator/machine.h>
-#include <linux/regulator/ab8500.h>
-#include "board-mop500-regulators.h"
-#include "id.h"
-
-static struct regulator_consumer_supply gpio_en_3v3_consumers[] = {
-       REGULATOR_SUPPLY("vdd33a", "smsc911x.0"),
-};
-
-struct regulator_init_data gpio_en_3v3_regulator = {
-       .constraints = {
-               .name = "EN-3V3",
-               .min_uV = 3300000,
-               .max_uV = 3300000,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-       },
-       .num_consumer_supplies = ARRAY_SIZE(gpio_en_3v3_consumers),
-       .consumer_supplies = gpio_en_3v3_consumers,
-};
-
-/*
- * TPS61052 regulator
- */
-static struct regulator_consumer_supply tps61052_vaudio_consumers[] = {
-       /*
-        * Boost converter supply to raise voltage on audio speaker, this
-        * is actually connected to three pins, VInVhfL (left amplifier)
-        * VInVhfR (right amplifier) and VIntDClassInt - all three must
-        * be connected to the same voltage.
-        */
-       REGULATOR_SUPPLY("vintdclassint", "ab8500-codec.0"),
-};
-
-struct regulator_init_data tps61052_regulator = {
-       .constraints = {
-               .name = "vaudio-hf",
-               .min_uV = 4500000,
-               .max_uV = 4500000,
-               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-       },
-       .num_consumer_supplies = ARRAY_SIZE(tps61052_vaudio_consumers),
-       .consumer_supplies = tps61052_vaudio_consumers,
-};
-
-static struct regulator_consumer_supply ab8500_vaux1_consumers[] = {
-       /* Main display, u8500 R3 uib */
-       REGULATOR_SUPPLY("vddi", "mcde_disp_sony_acx424akp.0"),
-       /* Main display, u8500 uib and ST uib */
-       REGULATOR_SUPPLY("vdd1", "samsung_s6d16d0.0"),
-       /* Secondary display, ST uib */
-       REGULATOR_SUPPLY("vdd1", "samsung_s6d16d0.1"),
-       /* SFH7741 proximity sensor */
-       REGULATOR_SUPPLY("vcc", "gpio-keys.0"),
-       /* BH1780GLS ambient light sensor */
-       REGULATOR_SUPPLY("vcc", "2-0029"),
-       /* lsm303dlh accelerometer */
-       REGULATOR_SUPPLY("vdd", "2-0018"),
-       /* lsm303dlhc accelerometer */
-       REGULATOR_SUPPLY("vdd", "2-0019"),
-       /* lsm303dlh magnetometer */
-       REGULATOR_SUPPLY("vdd", "2-001e"),
-       /* Rohm BU21013 Touchscreen devices */
-       REGULATOR_SUPPLY("avdd", "3-005c"),
-       REGULATOR_SUPPLY("avdd", "3-005d"),
-       /* Synaptics RMI4 Touchscreen device */
-       REGULATOR_SUPPLY("vdd", "3-004b"),
-       /* L3G4200D Gyroscope device */
-       REGULATOR_SUPPLY("vdd", "2-0068"),
-       /* Ambient light sensor device */
-       REGULATOR_SUPPLY("vdd", "3-0029"),
-       /* Pressure sensor device */
-       REGULATOR_SUPPLY("vdd", "2-005c"),
-       /* Cypress TrueTouch Touchscreen device */
-       REGULATOR_SUPPLY("vcpin", "spi8.0"),
-       /* Camera device */
-       REGULATOR_SUPPLY("vaux12v5", "mmio_camera"),
-};
-
-static struct regulator_consumer_supply ab8500_vaux2_consumers[] = {
-       /* On-board eMMC power */
-       REGULATOR_SUPPLY("vmmc", "sdi4"),
-       /* AB8500 audio codec */
-       REGULATOR_SUPPLY("vcc-N2158", "ab8500-codec.0"),
-       /* AB8500 accessory detect 1 */
-       REGULATOR_SUPPLY("vcc-N2158", "ab8500-acc-det.0"),
-       /* AB8500 Tv-out device */
-       REGULATOR_SUPPLY("vcc-N2158", "mcde_tv_ab8500.4"),
-       /* AV8100 HDMI device */
-       REGULATOR_SUPPLY("vcc-N2158", "av8100_hdmi.3"),
-};
-
-static struct regulator_consumer_supply ab8500_vaux3_consumers[] = {
-       REGULATOR_SUPPLY("v-SD-STM", "stm"),
-       /* External MMC slot power */
-       REGULATOR_SUPPLY("vmmc", "sdi0"),
-};
-
-static struct regulator_consumer_supply ab8505_vaux4_consumers[] = {
-};
-
-static struct regulator_consumer_supply ab8505_vaux5_consumers[] = {
-};
-
-static struct regulator_consumer_supply ab8505_vaux6_consumers[] = {
-};
-
-static struct regulator_consumer_supply ab8505_vaux8_consumers[] = {
-       /* AB8500 audio codec device */
-       REGULATOR_SUPPLY("v-aux8", NULL),
-};
-
-static struct regulator_consumer_supply ab8505_vadc_consumers[] = {
-       /* Internal general-purpose ADC */
-       REGULATOR_SUPPLY("vddadc", "ab8500-gpadc.0"),
-       /* ADC for charger */
-       REGULATOR_SUPPLY("vddadc", "ab8500-charger.0"),
-};
-
-static struct regulator_consumer_supply ab8500_vtvout_consumers[] = {
-       /* TV-out DENC supply */
-       REGULATOR_SUPPLY("vtvout", "ab8500-denc.0"),
-       /* Internal general-purpose ADC */
-       REGULATOR_SUPPLY("vddadc", "ab8500-gpadc.0"),
-       /* ADC for charger */
-       REGULATOR_SUPPLY("vddadc", "ab8500-charger.0"),
-       /* AB8500 Tv-out device */
-       REGULATOR_SUPPLY("vtvout", "mcde_tv_ab8500.4"),
-};
-
-static struct regulator_consumer_supply ab8500_vaud_consumers[] = {
-       /* AB8500 audio-codec main supply */
-       REGULATOR_SUPPLY("vaud", "ab8500-codec.0"),
-};
-
-static struct regulator_consumer_supply ab8500_vamic1_consumers[] = {
-       /* AB8500 audio-codec Mic1 supply */
-       REGULATOR_SUPPLY("vamic1", "ab8500-codec.0"),
-};
-
-static struct regulator_consumer_supply ab8500_vamic2_consumers[] = {
-       /* AB8500 audio-codec Mic2 supply */
-       REGULATOR_SUPPLY("vamic2", "ab8500-codec.0"),
-};
-
-static struct regulator_consumer_supply ab8500_vdmic_consumers[] = {
-       /* AB8500 audio-codec DMic supply */
-       REGULATOR_SUPPLY("vdmic", "ab8500-codec.0"),
-};
-
-static struct regulator_consumer_supply ab8500_vintcore_consumers[] = {
-       /* SoC core supply, no device */
-       REGULATOR_SUPPLY("v-intcore", NULL),
-       /* USB Transceiver */
-       REGULATOR_SUPPLY("vddulpivio18", "ab8500-usb.0"),
-       /* Handled by abx500 clk driver */
-       REGULATOR_SUPPLY("v-intcore", "abx500-clk.0"),
-};
-
-static struct regulator_consumer_supply ab8505_usb_consumers[] = {
-       /* HS USB OTG physical interface */
-       REGULATOR_SUPPLY("v-ape", NULL),
-};
-
-static struct regulator_consumer_supply ab8500_vana_consumers[] = {
-       /* DB8500 DSI */
-       REGULATOR_SUPPLY("vdddsi1v2", "mcde"),
-       REGULATOR_SUPPLY("vdddsi1v2", "b2r2_core"),
-       REGULATOR_SUPPLY("vdddsi1v2", "b2r2_1_core"),
-       REGULATOR_SUPPLY("vdddsi1v2", "dsilink.0"),
-       REGULATOR_SUPPLY("vdddsi1v2", "dsilink.1"),
-       REGULATOR_SUPPLY("vdddsi1v2", "dsilink.2"),
-       /* DB8500 CSI */
-       REGULATOR_SUPPLY("vddcsi1v2", "mmio_camera"),
-};
-
-/* ab8500 regulator register initialization */
-static struct ab8500_regulator_reg_init ab8500_reg_init[] = {
-       /*
-        * VanaRequestCtrl          = HP/LP depending on VxRequest
-        * VextSupply1RequestCtrl   = HP/LP depending on VxRequest
-        */
-       INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL2,       0xf0, 0x00),
-       /*
-        * VextSupply2RequestCtrl   = HP/LP depending on VxRequest
-        * VextSupply3RequestCtrl   = HP/LP depending on VxRequest
-        * Vaux1RequestCtrl         = HP/LP depending on VxRequest
-        * Vaux2RequestCtrl         = HP/LP depending on VxRequest
-        */
-       INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL3,       0xff, 0x00),
-       /*
-        * Vaux3RequestCtrl         = HP/LP depending on VxRequest
-        * SwHPReq                  = Control through SWValid disabled
-        */
-       INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL4,       0x07, 0x00),
-       /*
-        * VanaSysClkReq1HPValid    = disabled
-        * Vaux1SysClkReq1HPValid   = disabled
-        * Vaux2SysClkReq1HPValid   = disabled
-        * Vaux3SysClkReq1HPValid   = disabled
-        */
-       INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQ1HPVALID1, 0xe8, 0x00),
-       /*
-        * VextSupply1SysClkReq1HPValid = disabled
-        * VextSupply2SysClkReq1HPValid = disabled
-        * VextSupply3SysClkReq1HPValid = SysClkReq1 controlled
-        */
-       INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQ1HPVALID2, 0x70, 0x40),
-       /*
-        * VanaHwHPReq1Valid        = disabled
-        * Vaux1HwHPreq1Valid       = disabled
-        * Vaux2HwHPReq1Valid       = disabled
-        * Vaux3HwHPReqValid        = disabled
-        */
-       INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ1VALID1,     0xe8, 0x00),
-       /*
-        * VextSupply1HwHPReq1Valid = disabled
-        * VextSupply2HwHPReq1Valid = disabled
-        * VextSupply3HwHPReq1Valid = disabled
-        */
-       INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ1VALID2,     0x07, 0x00),
-       /*
-        * VanaHwHPReq2Valid        = disabled
-        * Vaux1HwHPReq2Valid       = disabled
-        * Vaux2HwHPReq2Valid       = disabled
-        * Vaux3HwHPReq2Valid       = disabled
-        */
-       INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ2VALID1,     0xe8, 0x00),
-       /*
-        * VextSupply1HwHPReq2Valid = disabled
-        * VextSupply2HwHPReq2Valid = disabled
-        * VextSupply3HwHPReq2Valid = HWReq2 controlled
-        */
-       INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ2VALID2,     0x07, 0x04),
-       /*
-        * VanaSwHPReqValid         = disabled
-        * Vaux1SwHPReqValid        = disabled
-        */
-       INIT_REGULATOR_REGISTER(AB8500_REGUSWHPREQVALID1,      0xa0, 0x00),
-       /*
-        * Vaux2SwHPReqValid        = disabled
-        * Vaux3SwHPReqValid        = disabled
-        * VextSupply1SwHPReqValid  = disabled
-        * VextSupply2SwHPReqValid  = disabled
-        * VextSupply3SwHPReqValid  = disabled
-        */
-       INIT_REGULATOR_REGISTER(AB8500_REGUSWHPREQVALID2,      0x1f, 0x00),
-       /*
-        * SysClkReq2Valid1         = SysClkReq2 controlled
-        * SysClkReq3Valid1         = disabled
-        * SysClkReq4Valid1         = SysClkReq4 controlled
-        * SysClkReq5Valid1         = disabled
-        * SysClkReq6Valid1         = SysClkReq6 controlled
-        * SysClkReq7Valid1         = disabled
-        * SysClkReq8Valid1         = disabled
-        */
-       INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQVALID1,    0xfe, 0x2a),
-       /*
-        * SysClkReq2Valid2         = disabled
-        * SysClkReq3Valid2         = disabled
-        * SysClkReq4Valid2         = disabled
-        * SysClkReq5Valid2         = disabled
-        * SysClkReq6Valid2         = SysClkReq6 controlled
-        * SysClkReq7Valid2         = disabled
-        * SysClkReq8Valid2         = disabled
-        */
-       INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQVALID2,    0xfe, 0x20),
-       /*
-        * VTVoutEna                = disabled
-        * Vintcore12Ena            = disabled
-        * Vintcore12Sel            = 1.25 V
-        * Vintcore12LP             = inactive (HP)
-        * VTVoutLP                 = inactive (HP)
-        */
-       INIT_REGULATOR_REGISTER(AB8500_REGUMISC1,              0xfe, 0x10),
-       /*
-        * VaudioEna                = disabled
-        * VdmicEna                 = disabled
-        * Vamic1Ena                = disabled
-        * Vamic2Ena                = disabled
-        */
-       INIT_REGULATOR_REGISTER(AB8500_VAUDIOSUPPLY,           0x1e, 0x00),
-       /*
-        * Vamic1_dzout             = high-Z when Vamic1 is disabled
-        * Vamic2_dzout             = high-Z when Vamic2 is disabled
-        */
-       INIT_REGULATOR_REGISTER(AB8500_REGUCTRL1VAMIC,         0x03, 0x00),
-       /*
-        * VPll                     = Hw controlled (NOTE! PRCMU bits)
-        * VanaRegu                 = force off
-        */
-       INIT_REGULATOR_REGISTER(AB8500_VPLLVANAREGU,           0x0f, 0x02),
-       /*
-        * VrefDDREna               = disabled
-        * VrefDDRSleepMode         = inactive (no pulldown)
-        */
-       INIT_REGULATOR_REGISTER(AB8500_VREFDDR,                0x03, 0x00),
-       /*
-        * VextSupply1Regu          = force LP
-        * VextSupply2Regu          = force OFF
-        * VextSupply3Regu          = force HP (-> STBB2=LP and TPS=LP)
-        * ExtSupply2Bypass         = ExtSupply12LPn ball is 0 when Ena is 0
-        * ExtSupply3Bypass         = ExtSupply3LPn ball is 0 when Ena is 0
-        */
-       INIT_REGULATOR_REGISTER(AB8500_EXTSUPPLYREGU,          0xff, 0x13),
-       /*
-        * Vaux1Regu                = force HP
-        * Vaux2Regu                = force off
-        */
-       INIT_REGULATOR_REGISTER(AB8500_VAUX12REGU,             0x0f, 0x01),
-       /*
-        * Vaux3Regu                = force off
-        */
-       INIT_REGULATOR_REGISTER(AB8500_VRF1VAUX3REGU,          0x03, 0x00),
-       /*
-        * Vaux1Sel                 = 2.8 V
-        */
-       INIT_REGULATOR_REGISTER(AB8500_VAUX1SEL,               0x0f, 0x0C),
-       /*
-        * Vaux2Sel                 = 2.9 V
-        */
-       INIT_REGULATOR_REGISTER(AB8500_VAUX2SEL,               0x0f, 0x0d),
-       /*
-        * Vaux3Sel                 = 2.91 V
-        */
-       INIT_REGULATOR_REGISTER(AB8500_VRF1VAUX3SEL,           0x07, 0x07),
-       /*
-        * VextSupply12LP           = disabled (no LP)
-        */
-       INIT_REGULATOR_REGISTER(AB8500_REGUCTRL2SPARE,         0x01, 0x00),
-       /*
-        * Vaux1Disch               = short discharge time
-        * Vaux2Disch               = short discharge time
-        * Vaux3Disch               = short discharge time
-        * Vintcore12Disch          = short discharge time
-        * VTVoutDisch              = short discharge time
-        * VaudioDisch              = short discharge time
-        */
-       INIT_REGULATOR_REGISTER(AB8500_REGUCTRLDISCH,          0xfc, 0x00),
-       /*
-        * VanaDisch                = short discharge time
-        * VdmicPullDownEna         = pulldown disabled when Vdmic is disabled
-        * VdmicDisch               = short discharge time
-        */
-       INIT_REGULATOR_REGISTER(AB8500_REGUCTRLDISCH2,         0x16, 0x00),
-};
-
-/* AB8500 regulators */
-static struct regulator_init_data ab8500_regulators[AB8500_NUM_REGULATORS] = {
-       /* supplies to the display/camera */
-       [AB8500_LDO_AUX1] = {
-               .supply_regulator = "ab8500-ext-supply3",
-               .constraints = {
-                       .name = "V-DISPLAY",
-                       .min_uV = 2800000,
-                       .max_uV = 3300000,
-                       .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
-                                         REGULATOR_CHANGE_STATUS,
-                       .boot_on = 1, /* display is on at boot */
-               },
-               .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux1_consumers),
-               .consumer_supplies = ab8500_vaux1_consumers,
-       },
-       /* supplies to the on-board eMMC */
-       [AB8500_LDO_AUX2] = {
-               .supply_regulator = "ab8500-ext-supply3",
-               .constraints = {
-                       .name = "V-eMMC1",
-                       .min_uV = 1100000,
-                       .max_uV = 3300000,
-                       .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
-                                         REGULATOR_CHANGE_STATUS |
-                                         REGULATOR_CHANGE_MODE,
-                       .valid_modes_mask = REGULATOR_MODE_NORMAL |
-                                           REGULATOR_MODE_IDLE,
-               },
-               .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux2_consumers),
-               .consumer_supplies = ab8500_vaux2_consumers,
-       },
-       /* supply for VAUX3, supplies to SDcard slots */
-       [AB8500_LDO_AUX3] = {
-               .supply_regulator = "ab8500-ext-supply3",
-               .constraints = {
-                       .name = "V-MMC-SD",
-                       .min_uV = 1100000,
-                       .max_uV = 3300000,
-                       .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
-                                         REGULATOR_CHANGE_STATUS |
-                                         REGULATOR_CHANGE_MODE,
-                       .valid_modes_mask = REGULATOR_MODE_NORMAL |
-                                           REGULATOR_MODE_IDLE,
-               },
-               .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux3_consumers),
-               .consumer_supplies = ab8500_vaux3_consumers,
-       },
-       /* supply for tvout, gpadc, TVOUT LDO */
-       [AB8500_LDO_TVOUT] = {
-               .constraints = {
-                       .name = "V-TVOUT",
-                       .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               },
-               .num_consumer_supplies = ARRAY_SIZE(ab8500_vtvout_consumers),
-               .consumer_supplies = ab8500_vtvout_consumers,
-       },
-       /* supply for ab8500-vaudio, VAUDIO LDO */
-       [AB8500_LDO_AUDIO] = {
-               .constraints = {
-                       .name = "V-AUD",
-                       .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               },
-               .num_consumer_supplies = ARRAY_SIZE(ab8500_vaud_consumers),
-               .consumer_supplies = ab8500_vaud_consumers,
-       },
-       /* supply for v-anamic1 VAMic1-LDO */
-       [AB8500_LDO_ANAMIC1] = {
-               .constraints = {
-                       .name = "V-AMIC1",
-                       .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               },
-               .num_consumer_supplies = ARRAY_SIZE(ab8500_vamic1_consumers),
-               .consumer_supplies = ab8500_vamic1_consumers,
-       },
-       /* supply for v-amic2, VAMIC2 LDO, reuse constants for AMIC1 */
-       [AB8500_LDO_ANAMIC2] = {
-               .constraints = {
-                       .name = "V-AMIC2",
-                       .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               },
-               .num_consumer_supplies = ARRAY_SIZE(ab8500_vamic2_consumers),
-               .consumer_supplies = ab8500_vamic2_consumers,
-       },
-       /* supply for v-dmic, VDMIC LDO */
-       [AB8500_LDO_DMIC] = {
-               .constraints = {
-                       .name = "V-DMIC",
-                       .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               },
-               .num_consumer_supplies = ARRAY_SIZE(ab8500_vdmic_consumers),
-               .consumer_supplies = ab8500_vdmic_consumers,
-       },
-       /* supply for v-intcore12, VINTCORE12 LDO */
-       [AB8500_LDO_INTCORE] = {
-               .constraints = {
-                       .name = "V-INTCORE",
-                       .min_uV = 1250000,
-                       .max_uV = 1350000,
-                       .input_uV = 1800000,
-                       .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
-                                         REGULATOR_CHANGE_STATUS |
-                                         REGULATOR_CHANGE_MODE |
-                                         REGULATOR_CHANGE_DRMS,
-                       .valid_modes_mask = REGULATOR_MODE_NORMAL |
-                                           REGULATOR_MODE_IDLE,
-               },
-               .num_consumer_supplies = ARRAY_SIZE(ab8500_vintcore_consumers),
-               .consumer_supplies = ab8500_vintcore_consumers,
-       },
-       /* supply for U8500 CSI-DSI, VANA LDO */
-       [AB8500_LDO_ANA] = {
-               .constraints = {
-                       .name = "V-CSI-DSI",
-                       .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               },
-               .num_consumer_supplies = ARRAY_SIZE(ab8500_vana_consumers),
-               .consumer_supplies = ab8500_vana_consumers,
-       },
-};
-
-/* supply for VextSupply3 */
-static struct regulator_consumer_supply ab8500_ext_supply3_consumers[] = {
-       /* SIM supply for 3 V SIM cards */
-       REGULATOR_SUPPLY("vinvsim", "sim-detect.0"),
-};
-
-/* extended configuration for VextSupply2, only used for HREFP_V20 boards */
-static struct ab8500_ext_regulator_cfg ab8500_ext_supply2 = {
-       .hwreq = true,
-};
-
-/*
- * AB8500 external regulators
- */
-static struct regulator_init_data ab8500_ext_regulators[] = {
-       /* fixed Vbat supplies VSMPS1_EXT_1V8 */
-       [AB8500_EXT_SUPPLY1] = {
-               .constraints = {
-                       .name = "ab8500-ext-supply1",
-                       .min_uV = 1800000,
-                       .max_uV = 1800000,
-                       .initial_mode = REGULATOR_MODE_IDLE,
-                       .boot_on = 1,
-                       .always_on = 1,
-               },
-       },
-       /* fixed Vbat supplies VSMPS2_EXT_1V36 and VSMPS5_EXT_1V15 */
-       [AB8500_EXT_SUPPLY2] = {
-               .constraints = {
-                       .name = "ab8500-ext-supply2",
-                       .min_uV = 1360000,
-                       .max_uV = 1360000,
-               },
-       },
-       /* fixed Vbat supplies VSMPS3_EXT_3V4 and VSMPS4_EXT_3V4 */
-       [AB8500_EXT_SUPPLY3] = {
-               .constraints = {
-                       .name = "ab8500-ext-supply3",
-                       .min_uV = 3400000,
-                       .max_uV = 3400000,
-                       .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-                       .boot_on = 1,
-               },
-               .num_consumer_supplies =
-                       ARRAY_SIZE(ab8500_ext_supply3_consumers),
-               .consumer_supplies = ab8500_ext_supply3_consumers,
-       },
-};
-
-/* ab8505 regulator register initialization */
-static struct ab8500_regulator_reg_init ab8505_reg_init[] = {
-       /*
-        * VarmRequestCtrl
-        * VsmpsCRequestCtrl
-        * VsmpsARequestCtrl
-        * VsmpsBRequestCtrl
-        */
-       INIT_REGULATOR_REGISTER(AB8505_REGUREQUESTCTRL1,       0x00, 0x00),
-       /*
-        * VsafeRequestCtrl
-        * VpllRequestCtrl
-        * VanaRequestCtrl          = HP/LP depending on VxRequest
-        */
-       INIT_REGULATOR_REGISTER(AB8505_REGUREQUESTCTRL2,       0x30, 0x00),
-       /*
-        * Vaux1RequestCtrl         = HP/LP depending on VxRequest
-        * Vaux2RequestCtrl         = HP/LP depending on VxRequest
-        */
-       INIT_REGULATOR_REGISTER(AB8505_REGUREQUESTCTRL3,       0xf0, 0x00),
-       /*
-        * Vaux3RequestCtrl         = HP/LP depending on VxRequest
-        * SwHPReq                  = Control through SWValid disabled
-        */
-       INIT_REGULATOR_REGISTER(AB8505_REGUREQUESTCTRL4,       0x07, 0x00),
-       /*
-        * VsmpsASysClkReq1HPValid
-        * VsmpsBSysClkReq1HPValid
-        * VsafeSysClkReq1HPValid
-        * VanaSysClkReq1HPValid    = disabled
-        * VpllSysClkReq1HPValid
-        * Vaux1SysClkReq1HPValid   = disabled
-        * Vaux2SysClkReq1HPValid   = disabled
-        * Vaux3SysClkReq1HPValid   = disabled
-        */
-       INIT_REGULATOR_REGISTER(AB8505_REGUSYSCLKREQ1HPVALID1, 0xe8, 0x00),
-       /*
-        * VsmpsCSysClkReq1HPValid
-        * VarmSysClkReq1HPValid
-        * VbbSysClkReq1HPValid
-        * VsmpsMSysClkReq1HPValid
-        */
-       INIT_REGULATOR_REGISTER(AB8505_REGUSYSCLKREQ1HPVALID2, 0x00, 0x00),
-       /*
-        * VsmpsAHwHPReq1Valid
-        * VsmpsBHwHPReq1Valid
-        * VsafeHwHPReq1Valid
-        * VanaHwHPReq1Valid        = disabled
-        * VpllHwHPReq1Valid
-        * Vaux1HwHPreq1Valid       = disabled
-        * Vaux2HwHPReq1Valid       = disabled
-        * Vaux3HwHPReqValid        = disabled
-        */
-       INIT_REGULATOR_REGISTER(AB8505_REGUHWHPREQ1VALID1,     0xe8, 0x00),
-       /*
-        * VsmpsMHwHPReq1Valid
-        */
-       INIT_REGULATOR_REGISTER(AB8505_REGUHWHPREQ1VALID2,     0x00, 0x00),
-       /*
-        * VsmpsAHwHPReq2Valid
-        * VsmpsBHwHPReq2Valid
-        * VsafeHwHPReq2Valid
-        * VanaHwHPReq2Valid        = disabled
-        * VpllHwHPReq2Valid
-        * Vaux1HwHPReq2Valid       = disabled
-        * Vaux2HwHPReq2Valid       = disabled
-        * Vaux3HwHPReq2Valid       = disabled
-        */
-       INIT_REGULATOR_REGISTER(AB8505_REGUHWHPREQ2VALID1,     0xe8, 0x00),
-       /*
-        * VsmpsMHwHPReq2Valid
-        */
-       INIT_REGULATOR_REGISTER(AB8505_REGUHWHPREQ2VALID2,     0x00, 0x00),
-       /**
-        * VsmpsCSwHPReqValid
-        * VarmSwHPReqValid
-        * VsmpsASwHPReqValid
-        * VsmpsBSwHPReqValid
-        * VsafeSwHPReqValid
-        * VanaSwHPReqValid
-        * VanaSwHPReqValid         = disabled
-        * VpllSwHPReqValid
-        * Vaux1SwHPReqValid        = disabled
-        */
-       INIT_REGULATOR_REGISTER(AB8505_REGUSWHPREQVALID1,      0xa0, 0x00),
-       /*
-        * Vaux2SwHPReqValid        = disabled
-        * Vaux3SwHPReqValid        = disabled
-        * VsmpsMSwHPReqValid
-        */
-       INIT_REGULATOR_REGISTER(AB8505_REGUSWHPREQVALID2,      0x03, 0x00),
-       /*
-        * SysClkReq2Valid1         = SysClkReq2 controlled
-        * SysClkReq3Valid1         = disabled
-        * SysClkReq4Valid1         = SysClkReq4 controlled
-        */
-       INIT_REGULATOR_REGISTER(AB8505_REGUSYSCLKREQVALID1,    0x0e, 0x0a),
-       /*
-        * SysClkReq2Valid2         = disabled
-        * SysClkReq3Valid2         = disabled
-        * SysClkReq4Valid2         = disabled
-        */
-       INIT_REGULATOR_REGISTER(AB8505_REGUSYSCLKREQVALID2,    0x0e, 0x00),
-       /*
-        * Vaux4SwHPReqValid
-        * Vaux4HwHPReq2Valid
-        * Vaux4HwHPReq1Valid
-        * Vaux4SysClkReq1HPValid
-        */
-       INIT_REGULATOR_REGISTER(AB8505_REGUVAUX4REQVALID,    0x00, 0x00),
-       /*
-        * VadcEna                  = disabled
-        * VintCore12Ena            = disabled
-        * VintCore12Sel            = 1.25 V
-        * VintCore12LP             = inactive (HP)
-        * VadcLP                   = inactive (HP)
-        */
-       INIT_REGULATOR_REGISTER(AB8505_REGUMISC1,              0xfe, 0x10),
-       /*
-        * VaudioEna                = disabled
-        * Vaux8Ena                 = disabled
-        * Vamic1Ena                = disabled
-        * Vamic2Ena                = disabled
-        */
-       INIT_REGULATOR_REGISTER(AB8505_VAUDIOSUPPLY,           0x1e, 0x00),
-       /*
-        * Vamic1_dzout             = high-Z when Vamic1 is disabled
-        * Vamic2_dzout             = high-Z when Vamic2 is disabled
-        */
-       INIT_REGULATOR_REGISTER(AB8505_REGUCTRL1VAMIC,         0x03, 0x00),
-       /*
-        * VsmpsARegu
-        * VsmpsASelCtrl
-        * VsmpsAAutoMode
-        * VsmpsAPWMMode
-        */
-       INIT_REGULATOR_REGISTER(AB8505_VSMPSAREGU,    0x00, 0x00),
-       /*
-        * VsmpsBRegu
-        * VsmpsBSelCtrl
-        * VsmpsBAutoMode
-        * VsmpsBPWMMode
-        */
-       INIT_REGULATOR_REGISTER(AB8505_VSMPSBREGU,    0x00, 0x00),
-       /*
-        * VsafeRegu
-        * VsafeSelCtrl
-        * VsafeAutoMode
-        * VsafePWMMode
-        */
-       INIT_REGULATOR_REGISTER(AB8505_VSAFEREGU,    0x00, 0x00),
-       /*
-        * VPll                     = Hw controlled (NOTE! PRCMU bits)
-        * VanaRegu                 = force off
-        */
-       INIT_REGULATOR_REGISTER(AB8505_VPLLVANAREGU,           0x0f, 0x02),
-       /*
-        * VextSupply1Regu          = force OFF (OTP_ExtSupply12LPnPolarity 1)
-        * VextSupply2Regu          = force OFF (OTP_ExtSupply12LPnPolarity 1)
-        * VextSupply3Regu          = force OFF (OTP_ExtSupply3LPnPolarity 0)
-        * ExtSupply2Bypass         = ExtSupply12LPn ball is 0 when Ena is 0
-        * ExtSupply3Bypass         = ExtSupply3LPn ball is 0 when Ena is 0
-        */
-       INIT_REGULATOR_REGISTER(AB8505_EXTSUPPLYREGU,          0xff, 0x30),
-       /*
-        * Vaux1Regu                = force HP
-        * Vaux2Regu                = force off
-        */
-       INIT_REGULATOR_REGISTER(AB8505_VAUX12REGU,             0x0f, 0x01),
-       /*
-        * Vaux3Regu                = force off
-        */
-       INIT_REGULATOR_REGISTER(AB8505_VRF1VAUX3REGU,          0x03, 0x00),
-       /*
-        * VsmpsASel1
-        */
-       INIT_REGULATOR_REGISTER(AB8505_VSMPSASEL1,    0x00, 0x00),
-       /*
-        * VsmpsASel2
-        */
-       INIT_REGULATOR_REGISTER(AB8505_VSMPSASEL2,    0x00, 0x00),
-       /*
-        * VsmpsASel3
-        */
-       INIT_REGULATOR_REGISTER(AB8505_VSMPSASEL3,    0x00, 0x00),
-       /*
-        * VsmpsBSel1
-        */
-       INIT_REGULATOR_REGISTER(AB8505_VSMPSBSEL1,    0x00, 0x00),
-       /*
-        * VsmpsBSel2
-        */
-       INIT_REGULATOR_REGISTER(AB8505_VSMPSBSEL2,    0x00, 0x00),
-       /*
-        * VsmpsBSel3
-        */
-       INIT_REGULATOR_REGISTER(AB8505_VSMPSBSEL3,    0x00, 0x00),
-       /*
-        * VsafeSel1
-        */
-       INIT_REGULATOR_REGISTER(AB8505_VSAFESEL1,    0x00, 0x00),
-       /*
-        * VsafeSel2
-        */
-       INIT_REGULATOR_REGISTER(AB8505_VSAFESEL2,    0x00, 0x00),
-       /*
-        * VsafeSel3
-        */
-       INIT_REGULATOR_REGISTER(AB8505_VSAFESEL3,    0x00, 0x00),
-       /*
-        * Vaux1Sel                 = 2.8 V
-        */
-       INIT_REGULATOR_REGISTER(AB8505_VAUX1SEL,               0x0f, 0x0C),
-       /*
-        * Vaux2Sel                 = 2.9 V
-        */
-       INIT_REGULATOR_REGISTER(AB8505_VAUX2SEL,               0x0f, 0x0d),
-       /*
-        * Vaux3Sel                 = 2.91 V
-        */
-       INIT_REGULATOR_REGISTER(AB8505_VRF1VAUX3SEL,           0x07, 0x07),
-       /*
-        * Vaux4RequestCtrl
-        */
-       INIT_REGULATOR_REGISTER(AB8505_VAUX4REQCTRL,    0x00, 0x00),
-       /*
-        * Vaux4Regu
-        */
-       INIT_REGULATOR_REGISTER(AB8505_VAUX4REGU,    0x00, 0x00),
-       /*
-        * Vaux4Sel
-        */
-       INIT_REGULATOR_REGISTER(AB8505_VAUX4SEL,    0x00, 0x00),
-       /*
-        * Vaux1Disch               = short discharge time
-        * Vaux2Disch               = short discharge time
-        * Vaux3Disch               = short discharge time
-        * Vintcore12Disch          = short discharge time
-        * VTVoutDisch              = short discharge time
-        * VaudioDisch              = short discharge time
-        */
-       INIT_REGULATOR_REGISTER(AB8505_REGUCTRLDISCH,          0xfc, 0x00),
-       /*
-        * VanaDisch                = short discharge time
-        * Vaux8PullDownEna         = pulldown disabled when Vaux8 is disabled
-        * Vaux8Disch               = short discharge time
-        */
-       INIT_REGULATOR_REGISTER(AB8505_REGUCTRLDISCH2,         0x16, 0x00),
-       /*
-        * Vaux4Disch               = short discharge time
-        */
-       INIT_REGULATOR_REGISTER(AB8505_REGUCTRLDISCH3,         0x01, 0x00),
-       /*
-        * Vaux5Sel
-        * Vaux5LP
-        * Vaux5Ena
-        * Vaux5Disch
-        * Vaux5DisSfst
-        * Vaux5DisPulld
-        */
-       INIT_REGULATOR_REGISTER(AB8505_CTRLVAUX5,              0x00, 0x00),
-       /*
-        * Vaux6Sel
-        * Vaux6LP
-        * Vaux6Ena
-        * Vaux6DisPulld
-        */
-       INIT_REGULATOR_REGISTER(AB8505_CTRLVAUX6,              0x00, 0x00),
-};
-
-static struct regulator_init_data ab8505_regulators[AB8505_NUM_REGULATORS] = {
-       /* supplies to the display/camera */
-       [AB8505_LDO_AUX1] = {
-               .constraints = {
-                       .name = "V-DISPLAY",
-                       .min_uV = 2800000,
-                       .max_uV = 3300000,
-                       .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
-                                         REGULATOR_CHANGE_STATUS,
-                       .boot_on = 1, /* display is on at boot */
-               },
-               .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux1_consumers),
-               .consumer_supplies = ab8500_vaux1_consumers,
-       },
-       /* supplies to the on-board eMMC */
-       [AB8505_LDO_AUX2] = {
-               .constraints = {
-                       .name = "V-eMMC1",
-                       .min_uV = 1100000,
-                       .max_uV = 3300000,
-                       .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
-                                         REGULATOR_CHANGE_STATUS |
-                                         REGULATOR_CHANGE_MODE,
-                       .valid_modes_mask = REGULATOR_MODE_NORMAL |
-                                           REGULATOR_MODE_IDLE,
-               },
-               .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux2_consumers),
-               .consumer_supplies = ab8500_vaux2_consumers,
-       },
-       /* supply for VAUX3, supplies to SDcard slots */
-       [AB8505_LDO_AUX3] = {
-               .constraints = {
-                       .name = "V-MMC-SD",
-                       .min_uV = 1100000,
-                       .max_uV = 3300000,
-                       .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
-                                         REGULATOR_CHANGE_STATUS |
-                                         REGULATOR_CHANGE_MODE,
-                       .valid_modes_mask = REGULATOR_MODE_NORMAL |
-                                           REGULATOR_MODE_IDLE,
-               },
-               .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux3_consumers),
-               .consumer_supplies = ab8500_vaux3_consumers,
-       },
-       /* supply for VAUX4, supplies to NFC and standalone secure element */
-       [AB8505_LDO_AUX4] = {
-               .constraints = {
-                       .name = "V-NFC-SE",
-                       .min_uV = 1100000,
-                       .max_uV = 3300000,
-                       .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
-                                         REGULATOR_CHANGE_STATUS |
-                                         REGULATOR_CHANGE_MODE,
-                       .valid_modes_mask = REGULATOR_MODE_NORMAL |
-                                           REGULATOR_MODE_IDLE,
-               },
-               .num_consumer_supplies = ARRAY_SIZE(ab8505_vaux4_consumers),
-               .consumer_supplies = ab8505_vaux4_consumers,
-       },
-       /* supply for VAUX5, supplies to TBD */
-       [AB8505_LDO_AUX5] = {
-               .constraints = {
-                       .name = "V-AUX5",
-                       .min_uV = 1050000,
-                       .max_uV = 2790000,
-                       .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
-                                         REGULATOR_CHANGE_STATUS |
-                                         REGULATOR_CHANGE_MODE,
-                       .valid_modes_mask = REGULATOR_MODE_NORMAL |
-                                           REGULATOR_MODE_IDLE,
-               },
-               .num_consumer_supplies = ARRAY_SIZE(ab8505_vaux5_consumers),
-               .consumer_supplies = ab8505_vaux5_consumers,
-       },
-       /* supply for VAUX6, supplies to TBD */
-       [AB8505_LDO_AUX6] = {
-               .constraints = {
-                       .name = "V-AUX6",
-                       .min_uV = 1050000,
-                       .max_uV = 2790000,
-                       .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
-                                         REGULATOR_CHANGE_STATUS |
-                                         REGULATOR_CHANGE_MODE,
-                       .valid_modes_mask = REGULATOR_MODE_NORMAL |
-                                           REGULATOR_MODE_IDLE,
-               },
-               .num_consumer_supplies = ARRAY_SIZE(ab8505_vaux6_consumers),
-               .consumer_supplies = ab8505_vaux6_consumers,
-       },
-       /* supply for gpadc, ADC LDO */
-       [AB8505_LDO_ADC] = {
-               .constraints = {
-                       .name = "V-ADC",
-                       .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               },
-               .num_consumer_supplies = ARRAY_SIZE(ab8505_vadc_consumers),
-               .consumer_supplies = ab8505_vadc_consumers,
-       },
-       /* supply for ab8500-vaudio, VAUDIO LDO */
-       [AB8505_LDO_AUDIO] = {
-               .constraints = {
-                       .name = "V-AUD",
-                       .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               },
-               .num_consumer_supplies = ARRAY_SIZE(ab8500_vaud_consumers),
-               .consumer_supplies = ab8500_vaud_consumers,
-       },
-       /* supply for v-anamic1 VAMic1-LDO */
-       [AB8505_LDO_ANAMIC1] = {
-               .constraints = {
-                       .name = "V-AMIC1",
-                       .valid_ops_mask = REGULATOR_CHANGE_STATUS |
-                                         REGULATOR_CHANGE_MODE,
-                       .valid_modes_mask = REGULATOR_MODE_NORMAL |
-                                           REGULATOR_MODE_IDLE,
-               },
-               .num_consumer_supplies = ARRAY_SIZE(ab8500_vamic1_consumers),
-               .consumer_supplies = ab8500_vamic1_consumers,
-       },
-       /* supply for v-amic2, VAMIC2 LDO, reuse constants for AMIC1 */
-       [AB8505_LDO_ANAMIC2] = {
-               .constraints = {
-                       .name = "V-AMIC2",
-                       .valid_ops_mask = REGULATOR_CHANGE_STATUS |
-                                         REGULATOR_CHANGE_MODE,
-                       .valid_modes_mask = REGULATOR_MODE_NORMAL |
-                                           REGULATOR_MODE_IDLE,
-               },
-               .num_consumer_supplies = ARRAY_SIZE(ab8500_vamic2_consumers),
-               .consumer_supplies = ab8500_vamic2_consumers,
-       },
-       /* supply for v-aux8, VAUX8 LDO */
-       [AB8505_LDO_AUX8] = {
-               .constraints = {
-                       .name = "V-AUX8",
-                       .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               },
-               .num_consumer_supplies = ARRAY_SIZE(ab8505_vaux8_consumers),
-               .consumer_supplies = ab8505_vaux8_consumers,
-       },
-       /* supply for v-intcore12, VINTCORE12 LDO */
-       [AB8505_LDO_INTCORE] = {
-               .constraints = {
-                       .name = "V-INTCORE",
-                       .min_uV = 1250000,
-                       .max_uV = 1350000,
-                       .input_uV = 1800000,
-                       .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
-                                         REGULATOR_CHANGE_STATUS |
-                                         REGULATOR_CHANGE_MODE |
-                                         REGULATOR_CHANGE_DRMS,
-                       .valid_modes_mask = REGULATOR_MODE_NORMAL |
-                                           REGULATOR_MODE_IDLE,
-               },
-               .num_consumer_supplies = ARRAY_SIZE(ab8500_vintcore_consumers),
-               .consumer_supplies = ab8500_vintcore_consumers,
-       },
-       /* supply for LDO USB */
-       [AB8505_LDO_USB] = {
-               .constraints = {
-                       .name = "V-USB",
-                       .valid_ops_mask = REGULATOR_CHANGE_STATUS |
-                                         REGULATOR_CHANGE_MODE,
-                       .valid_modes_mask = REGULATOR_MODE_NORMAL |
-                                           REGULATOR_MODE_IDLE,
-               },
-               .num_consumer_supplies = ARRAY_SIZE(ab8505_usb_consumers),
-               .consumer_supplies = ab8505_usb_consumers,
-       },
-       /* supply for U8500 CSI-DSI, VANA LDO */
-       [AB8505_LDO_ANA] = {
-               .constraints = {
-                       .name = "V-CSI-DSI",
-                       .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-               },
-               .num_consumer_supplies = ARRAY_SIZE(ab8500_vana_consumers),
-               .consumer_supplies = ab8500_vana_consumers,
-       },
-};
-
-struct ab8500_regulator_platform_data ab8500_regulator_plat_data = {
-       .reg_init               = ab8500_reg_init,
-       .num_reg_init           = ARRAY_SIZE(ab8500_reg_init),
-       .regulator              = ab8500_regulators,
-       .num_regulator          = ARRAY_SIZE(ab8500_regulators),
-       .ext_regulator          = ab8500_ext_regulators,
-       .num_ext_regulator      = ARRAY_SIZE(ab8500_ext_regulators),
-};
-
-struct ab8500_regulator_platform_data ab8505_regulator_plat_data = {
-       .reg_init               = ab8505_reg_init,
-       .num_reg_init           = ARRAY_SIZE(ab8505_reg_init),
-       .regulator              = ab8505_regulators,
-       .num_regulator          = ARRAY_SIZE(ab8505_regulators),
-};
-
-static void ab8500_modify_reg_init(int id, u8 mask, u8 value)
-{
-       int i;
-
-       if (cpu_is_u8520()) {
-               for (i = ARRAY_SIZE(ab8505_reg_init) - 1; i >= 0; i--) {
-                       if (ab8505_reg_init[i].id == id) {
-                               u8 initval = ab8505_reg_init[i].value;
-                               initval = (initval & ~mask) | (value & mask);
-                               ab8505_reg_init[i].value = initval;
-
-                               BUG_ON(mask & ~ab8505_reg_init[i].mask);
-                               return;
-                       }
-               }
-       } else {
-               for (i = ARRAY_SIZE(ab8500_reg_init) - 1; i >= 0; i--) {
-                       if (ab8500_reg_init[i].id == id) {
-                               u8 initval = ab8500_reg_init[i].value;
-                               initval = (initval & ~mask) | (value & mask);
-                               ab8500_reg_init[i].value = initval;
-
-                               BUG_ON(mask & ~ab8500_reg_init[i].mask);
-                               return;
-                       }
-               }
-       }
-
-       BUG_ON(1);
-}
-
-void mop500_regulator_init(void)
-{
-       struct regulator_init_data *regulator;
-
-       /*
-        * Temporarily turn on Vaux2 on 8520 machine
-        */
-       if (cpu_is_u8520()) {
-               /* Vaux2 initialized to be on */
-               ab8500_modify_reg_init(AB8505_VAUX12REGU, 0x0f, 0x05);
-       }
-
-       /*
-        * Handle AB8500_EXT_SUPPLY2 on HREFP_V20_V50 boards (do it for
-        * all HREFP_V20 boards)
-        */
-       if (cpu_is_u8500v20()) {
-               /* VextSupply2RequestCtrl =  HP/OFF depending on VxRequest */
-               ab8500_modify_reg_init(AB8500_REGUREQUESTCTRL3, 0x01, 0x01);
-
-               /* VextSupply2SysClkReq1HPValid = SysClkReq1 controlled */
-               ab8500_modify_reg_init(AB8500_REGUSYSCLKREQ1HPVALID2,
-                       0x20, 0x20);
-
-               /* VextSupply2 = force HP at initialization */
-               ab8500_modify_reg_init(AB8500_EXTSUPPLYREGU, 0x0c, 0x04);
-
-               /* enable VextSupply2 during platform active */
-               regulator = &ab8500_ext_regulators[AB8500_EXT_SUPPLY2];
-               regulator->constraints.always_on = 1;
-
-               /* disable VextSupply2 in suspend */
-               regulator = &ab8500_ext_regulators[AB8500_EXT_SUPPLY2];
-               regulator->constraints.state_mem.disabled = 1;
-               regulator->constraints.state_standby.disabled = 1;
-
-               /* enable VextSupply2 HW control (used in suspend) */
-               regulator->driver_data = (void *)&ab8500_ext_supply2;
-       }
-}
diff --git a/arch/arm/mach-ux500/board-mop500-regulators.h b/arch/arm/mach-ux500/board-mop500-regulators.h
deleted file mode 100644 (file)
index 9bece38..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) ST-Ericsson SA 2010
- *
- * License Terms: GNU General Public License v2
- *
- * Author: Bengt Jonsson <bengt.g.jonsson@stericsson.com> for ST-Ericsson
- *
- * MOP500 board specific initialization for regulators
- */
-
-#ifndef __BOARD_MOP500_REGULATORS_H
-#define __BOARD_MOP500_REGULATORS_H
-
-#include <linux/regulator/machine.h>
-#include <linux/regulator/ab8500.h>
-
-extern struct ab8500_regulator_platform_data ab8500_regulator_plat_data;
-extern struct ab8500_regulator_platform_data ab8505_regulator_plat_data;
-extern struct regulator_init_data tps61052_regulator;
-extern struct regulator_init_data gpio_en_3v3_regulator;
-
-void mop500_regulator_init(void);
-
-#endif
diff --git a/arch/arm/mach-ux500/cache-l2x0.c b/arch/arm/mach-ux500/cache-l2x0.c
deleted file mode 100644 (file)
index 780bd13..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) ST-Ericsson SA 2011
- *
- * License terms: GNU General Public License (GPL) version 2
- */
-
-#include <linux/io.h>
-#include <linux/of.h>
-#include <linux/of_address.h>
-
-#include <asm/outercache.h>
-#include <asm/hardware/cache-l2x0.h>
-
-#include "db8500-regs.h"
-#include "id.h"
-
-static int __init ux500_l2x0_unlock(void)
-{
-       int i;
-       struct device_node *np;
-       void __iomem *l2x0_base;
-
-       np = of_find_compatible_node(NULL, NULL, "arm,pl310-cache");
-       l2x0_base = of_iomap(np, 0);
-       of_node_put(np);
-       if (!l2x0_base)
-               return -ENODEV;
-
-       /*
-        * Unlock Data and Instruction Lock if locked. Ux500 U-Boot versions
-        * apparently locks both caches before jumping to the kernel. The
-        * l2x0 core will not touch the unlock registers if the l2x0 is
-        * already enabled, so we do it right here instead. The PL310 has
-        * 8 sets of registers, one per possible CPU.
-        */
-       for (i = 0; i < 8; i++) {
-               writel_relaxed(0x0, l2x0_base + L2X0_LOCKDOWN_WAY_D_BASE +
-                              i * L2X0_LOCKDOWN_STRIDE);
-               writel_relaxed(0x0, l2x0_base + L2X0_LOCKDOWN_WAY_I_BASE +
-                              i * L2X0_LOCKDOWN_STRIDE);
-       }
-       iounmap(l2x0_base);
-       return 0;
-}
-
-static void ux500_l2c310_write_sec(unsigned long val, unsigned reg)
-{
-       /*
-        * We can't write to secure registers as we are in non-secure
-        * mode, until we have some SMI service available.
-        */
-}
-
-static int __init ux500_l2x0_init(void)
-{
-       /* Multiplatform guard */
-       if (!((cpu_is_u8500_family() || cpu_is_ux540_family())))
-               return -ENODEV;
-
-       /* Unlock before init */
-       ux500_l2x0_unlock();
-       outer_cache.write_sec = ux500_l2c310_write_sec;
-       l2x0_of_init(0, ~0);
-
-       return 0;
-}
-early_initcall(ux500_l2x0_init);
index a557955..46b1da1 100644 (file)
 #include <linux/init.h>
 #include <linux/device.h>
 #include <linux/amba/bus.h>
+#include <linux/init.h>
 #include <linux/interrupt.h>
 #include <linux/irq.h>
+#include <linux/irqchip.h>
+#include <linux/irqchip/arm-gic.h>
+#include <linux/mfd/dbx500-prcmu.h>
+#include <linux/platform_data/arm-ux500-pm.h>
 #include <linux/platform_device.h>
 #include <linux/io.h>
-#include <linux/mfd/abx500/ab8500.h>
-#include <linux/mfd/dbx500-prcmu.h>
 #include <linux/of.h>
+#include <linux/of_address.h>
 #include <linux/of_platform.h>
 #include <linux/perf/arm_pmu.h>
 #include <linux/regulator/machine.h>
-#include <linux/random.h>
 
+#include <asm/outercache.h>
+#include <asm/hardware/cache-l2x0.h>
 #include <asm/mach/map.h>
+#include <asm/mach/arch.h>
 
 #include "setup.h"
 
-#include "board-mop500-regulators.h"
 #include "board-mop500.h"
 #include "db8500-regs.h"
-#include "id.h"
 
-static struct ab8500_platform_data ab8500_platdata = {
-       .regulator      = &ab8500_regulator_plat_data,
-};
+static int __init ux500_l2x0_unlock(void)
+{
+       int i;
+       struct device_node *np;
+       void __iomem *l2x0_base;
 
-static struct prcmu_pdata db8500_prcmu_pdata = {
-       .ab_platdata    = &ab8500_platdata,
-       .version_offset = DB8500_PRCMU_FW_VERSION_OFFSET,
-       .legacy_offset  = DB8500_PRCMU_LEGACY_OFFSET,
-};
+       np = of_find_compatible_node(NULL, NULL, "arm,pl310-cache");
+       l2x0_base = of_iomap(np, 0);
+       of_node_put(np);
+       if (!l2x0_base)
+               return -ENODEV;
+
+       /*
+        * Unlock Data and Instruction Lock if locked. Ux500 U-Boot versions
+        * apparently locks both caches before jumping to the kernel. The
+        * l2x0 core will not touch the unlock registers if the l2x0 is
+        * already enabled, so we do it right here instead. The PL310 has
+        * 8 sets of registers, one per possible CPU.
+        */
+       for (i = 0; i < 8; i++) {
+               writel_relaxed(0x0, l2x0_base + L2X0_LOCKDOWN_WAY_D_BASE +
+                              i * L2X0_LOCKDOWN_STRIDE);
+               writel_relaxed(0x0, l2x0_base + L2X0_LOCKDOWN_WAY_I_BASE +
+                              i * L2X0_LOCKDOWN_STRIDE);
+       }
+       iounmap(l2x0_base);
+       return 0;
+}
+
+static void ux500_l2c310_write_sec(unsigned long val, unsigned reg)
+{
+       /*
+        * We can't write to secure registers as we are in non-secure
+        * mode, until we have some SMI service available.
+        */
+}
 
-static void __init u8500_map_io(void)
+/*
+ * FIXME: Should we set up the GPIO domain here?
+ *
+ * The problem is that we cannot put the interrupt resources into the platform
+ * device until the irqdomain has been added. Right now, we set the GIC interrupt
+ * domain from init_irq(), then load the gpio driver from
+ * core_initcall(nmk_gpio_init) and add the platform devices from
+ * arch_initcall(customize_machine).
+ *
+ * This feels fragile because it depends on the gpio device getting probed
+ * _before_ any device uses the gpio interrupts.
+*/
+static void __init ux500_init_irq(void)
+{
+       struct device_node *np;
+       struct resource r;
+
+       irqchip_init();
+       np = of_find_compatible_node(NULL, NULL, "stericsson,db8500-prcmu");
+       of_address_to_resource(np, 0, &r);
+       of_node_put(np);
+       if (!r.start) {
+               pr_err("could not find PRCMU base resource\n");
+               return;
+       }
+       prcmu_early_init(r.start, r.end-r.start);
+       ux500_pm_init(r.start, r.end-r.start);
+
+       /* Unlock before init */
+       ux500_l2x0_unlock();
+       outer_cache.write_sec = ux500_l2c310_write_sec;
+}
+
+static void ux500_restart(enum reboot_mode mode, const char *cmd)
 {
-       debug_ll_io_init();
-       ux500_setup_id();
+       local_irq_disable();
+       local_fiq_disable();
+
+       prcmu_system_reset(0);
 }
 
 /*
@@ -73,31 +139,6 @@ static struct arm_pmu_platdata db8500_pmu_platdata = {
        .handle_irq             = db8500_pmu_handler,
 };
 
-static const char *db8500_read_soc_id(void)
-{
-       void __iomem *uid;
-       const char *retstr;
-
-       uid = ioremap(U8500_BB_UID_BASE, 0x20);
-       if (!uid)
-               return NULL;
-       /* Throw these device-specific numbers into the entropy pool */
-       add_device_randomness(uid, 0x14);
-       retstr = kasprintf(GFP_KERNEL, "%08x%08x%08x%08x%08x",
-                        readl((u32 *)uid+0),
-                        readl((u32 *)uid+1), readl((u32 *)uid+2),
-                        readl((u32 *)uid+3), readl((u32 *)uid+4));
-       iounmap(uid);
-       return retstr;
-}
-
-static struct device * __init db8500_soc_device_init(void)
-{
-       const char *soc_id = db8500_read_soc_id();
-
-       return ux500_soc_device_init(soc_id);
-}
-
 static struct of_dev_auxdata u8500_auxdata_lookup[] __initdata = {
        /* Requires call-back bindings. */
        OF_DEV_AUXDATA("arm,cortex-a9-pmu", 0, "arm-pmu", &db8500_pmu_platdata),
@@ -111,8 +152,7 @@ static struct of_dev_auxdata u8500_auxdata_lookup[] __initdata = {
        OF_DEV_AUXDATA("stericsson,ux500-msp-i2s", 0x80125000,
                       "ux500-msp-i2s.3", &msp3_platform_data),
        /* Requires non-DT:able platform data. */
-       OF_DEV_AUXDATA("stericsson,db8500-prcmu", 0x80157000, "db8500-prcmu",
-                       &db8500_prcmu_pdata),
+       OF_DEV_AUXDATA("stericsson,db8500-prcmu", 0x80157000, "db8500-prcmu", NULL),
        OF_DEV_AUXDATA("stericsson,ux500-cryp", 0xa03cb000, "cryp1", NULL),
        OF_DEV_AUXDATA("stericsson,ux500-hash", 0xa03c2000, "hash1", NULL),
        OF_DEV_AUXDATA("stericsson,snd-soc-mop500", 0, "snd-soc-mop500.0",
@@ -121,8 +161,7 @@ static struct of_dev_auxdata u8500_auxdata_lookup[] __initdata = {
 };
 
 static struct of_dev_auxdata u8540_auxdata_lookup[] __initdata = {
-       OF_DEV_AUXDATA("stericsson,db8500-prcmu", 0x80157000, "db8500-prcmu",
-                       &db8500_prcmu_pdata),
+       OF_DEV_AUXDATA("stericsson,db8500-prcmu", 0x80157000, "db8500-prcmu", NULL),
        {},
 };
 
@@ -136,15 +175,13 @@ static const struct of_device_id u8500_local_bus_nodes[] = {
 
 static void __init u8500_init_machine(void)
 {
-       struct device *parent = db8500_soc_device_init();
-
        /* automatically probe child nodes of dbx5x0 devices */
        if (of_machine_is_compatible("st-ericsson,u8540"))
                of_platform_populate(NULL, u8500_local_bus_nodes,
-                                    u8540_auxdata_lookup, parent);
+                                    u8540_auxdata_lookup, NULL);
        else
                of_platform_populate(NULL, u8500_local_bus_nodes,
-                                    u8500_auxdata_lookup, parent);
+                                    u8500_auxdata_lookup, NULL);
 }
 
 static const char * stericsson_dt_platform_compat[] = {
@@ -156,10 +193,10 @@ static const char * stericsson_dt_platform_compat[] = {
 };
 
 DT_MACHINE_START(U8500_DT, "ST-Ericsson Ux5x0 platform (Device Tree Support)")
-       .map_io         = u8500_map_io,
+       .l2c_aux_val    = 0,
+       .l2c_aux_mask   = ~0,
        .init_irq       = ux500_init_irq,
        .init_machine   = u8500_init_machine,
-       .init_late      = NULL,
        .dt_compat      = stericsson_dt_platform_compat,
        .restart        = ux500_restart,
 MACHINE_END
diff --git a/arch/arm/mach-ux500/cpu.c b/arch/arm/mach-ux500/cpu.c
deleted file mode 100644 (file)
index 82156cb..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (C) ST-Ericsson SA 2010
- *
- * Author: Rabin Vincent <rabin.vincent@stericsson.com> for ST-Ericsson
- * Author: Lee Jones <lee.jones@linaro.org> for ST-Ericsson
- * License terms: GNU General Public License (GPL) version 2
- */
-
-#include <linux/platform_device.h>
-#include <linux/io.h>
-#include <linux/mfd/dbx500-prcmu.h>
-#include <linux/sys_soc.h>
-#include <linux/err.h>
-#include <linux/slab.h>
-#include <linux/stat.h>
-#include <linux/of.h>
-#include <linux/of_irq.h>
-#include <linux/of_address.h>
-#include <linux/irq.h>
-#include <linux/irqchip.h>
-#include <linux/irqchip/arm-gic.h>
-#include <linux/platform_data/clk-ux500.h>
-#include <linux/platform_data/arm-ux500-pm.h>
-
-#include <asm/mach/map.h>
-
-#include "setup.h"
-
-#include "board-mop500.h"
-#include "db8500-regs.h"
-#include "id.h"
-
-void ux500_restart(enum reboot_mode mode, const char *cmd)
-{
-       local_irq_disable();
-       local_fiq_disable();
-
-       prcmu_system_reset(0);
-}
-
-/*
- * FIXME: Should we set up the GPIO domain here?
- *
- * The problem is that we cannot put the interrupt resources into the platform
- * device until the irqdomain has been added. Right now, we set the GIC interrupt
- * domain from init_irq(), then load the gpio driver from
- * core_initcall(nmk_gpio_init) and add the platform devices from
- * arch_initcall(customize_machine).
- *
- * This feels fragile because it depends on the gpio device getting probed
- * _before_ any device uses the gpio interrupts.
-*/
-void __init ux500_init_irq(void)
-{
-       struct device_node *np;
-       struct resource r;
-
-       irqchip_init();
-       np = of_find_compatible_node(NULL, NULL, "stericsson,db8500-prcmu");
-       of_address_to_resource(np, 0, &r);
-       of_node_put(np);
-       if (!r.start) {
-               pr_err("could not find PRCMU base resource\n");
-               return;
-       }
-       prcmu_early_init(r.start, r.end-r.start);
-       ux500_pm_init(r.start, r.end-r.start);
-
-       /*
-        * Init clocks here so that they are available for system timer
-        * initialization.
-        */
-       if (cpu_is_u8500_family())
-               u8500_clk_init();
-       else if (cpu_is_u9540())
-               u9540_clk_init();
-       else if (cpu_is_u8540())
-               u8540_clk_init();
-}
-
-static const char * __init ux500_get_machine(void)
-{
-       return kasprintf(GFP_KERNEL, "DB%4x", dbx500_partnumber());
-}
-
-static const char * __init ux500_get_family(void)
-{
-       return kasprintf(GFP_KERNEL, "ux500");
-}
-
-static const char * __init ux500_get_revision(void)
-{
-       unsigned int rev = dbx500_revision();
-
-       if (rev == 0x01)
-               return kasprintf(GFP_KERNEL, "%s", "ED");
-       else if (rev >= 0xA0)
-               return kasprintf(GFP_KERNEL, "%d.%d",
-                                (rev >> 4) - 0xA + 1, rev & 0xf);
-
-       return kasprintf(GFP_KERNEL, "%s", "Unknown");
-}
-
-static ssize_t ux500_get_process(struct device *dev,
-                                       struct device_attribute *attr,
-                                       char *buf)
-{
-       if (dbx500_id.process == 0x00)
-               return sprintf(buf, "Standard\n");
-
-       return sprintf(buf, "%02xnm\n", dbx500_id.process);
-}
-
-static void __init soc_info_populate(struct soc_device_attribute *soc_dev_attr,
-                                    const char *soc_id)
-{
-       soc_dev_attr->soc_id   = soc_id;
-       soc_dev_attr->machine  = ux500_get_machine();
-       soc_dev_attr->family   = ux500_get_family();
-       soc_dev_attr->revision = ux500_get_revision();
-}
-
-static const struct device_attribute ux500_soc_attr =
-       __ATTR(process,  S_IRUGO, ux500_get_process,  NULL);
-
-struct device * __init ux500_soc_device_init(const char *soc_id)
-{
-       struct device *parent;
-       struct soc_device *soc_dev;
-       struct soc_device_attribute *soc_dev_attr;
-
-       soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
-       if (!soc_dev_attr)
-               return ERR_PTR(-ENOMEM);
-
-       soc_info_populate(soc_dev_attr, soc_id);
-
-       soc_dev = soc_device_register(soc_dev_attr);
-       if (IS_ERR(soc_dev)) {
-               kfree(soc_dev_attr);
-               return NULL;
-       }
-
-       parent = soc_device_to_device(soc_dev);
-       device_create_file(parent, &ux500_soc_attr);
-
-       return parent;
-}
diff --git a/arch/arm/mach-ux500/id.c b/arch/arm/mach-ux500/id.c
deleted file mode 100644 (file)
index 1e81e99..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (C) ST-Ericsson SA 2010
- *
- * Author: Rabin Vincent <rabin.vincent@stericsson.com> for ST-Ericsson
- * License terms: GNU General Public License (GPL) version 2
- */
-
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/io.h>
-
-#include <asm/cputype.h>
-#include <asm/tlbflush.h>
-#include <asm/cacheflush.h>
-#include <asm/mach/map.h>
-
-#include "setup.h"
-
-#include "db8500-regs.h"
-#include "id.h"
-
-struct dbx500_asic_id dbx500_id;
-
-static unsigned int __init ux500_read_asicid(phys_addr_t addr)
-{
-       phys_addr_t base = addr & ~0xfff;
-       struct map_desc desc = {
-               .virtual        = (unsigned long)UX500_VIRT_ROM,
-               .pfn            = __phys_to_pfn(base),
-               .length         = SZ_16K,
-               .type           = MT_DEVICE,
-       };
-
-       iotable_init(&desc, 1);
-
-       /* As in devicemaps_init() */
-       local_flush_tlb_all();
-       flush_cache_all();
-
-       return readl(UX500_VIRT_ROM + (addr & 0xfff));
-}
-
-static void ux500_print_soc_info(unsigned int asicid)
-{
-       unsigned int rev = dbx500_revision();
-
-       pr_info("DB%4x ", dbx500_partnumber());
-
-       if (rev == 0x01)
-               pr_cont("Early Drop");
-       else if (rev >= 0xA0)
-               pr_cont("v%d.%d" , (rev >> 4) - 0xA + 1, rev & 0xf);
-       else
-               pr_cont("Unknown");
-
-       pr_cont(" [%#010x]\n", asicid);
-}
-
-static unsigned int partnumber(unsigned int asicid)
-{
-       return (asicid >> 8) & 0xffff;
-}
-
-/*
- * SOC         MIDR            ASICID ADDRESS          ASICID VALUE
- * DB8500ed    0x410fc090      0x9001FFF4              0x00850001
- * DB8500v1    0x411fc091      0x9001FFF4              0x008500A0
- * DB8500v1.1  0x411fc091      0x9001FFF4              0x008500A1
- * DB8500v2    0x412fc091      0x9001DBF4              0x008500B0
- * DB8520v2.2  0x412fc091      0x9001DBF4              0x008500B2
- * DB5500v1    0x412fc091      0x9001FFF4              0x005500A0
- * DB9540      0x413fc090      0xFFFFDBF4              0x009540xx
- */
-
-void __init ux500_setup_id(void)
-{
-       unsigned int cpuid = read_cpuid_id();
-       unsigned int asicid = 0;
-       phys_addr_t addr = 0;
-
-       switch (cpuid) {
-       case 0x410fc090: /* DB8500ed */
-       case 0x411fc091: /* DB8500v1 */
-               addr = 0x9001FFF4;
-               break;
-
-       case 0x412fc091: /* DB8520 / DB8500v2 / DB5500v1 */
-               asicid = ux500_read_asicid(0x9001DBF4);
-               if (partnumber(asicid) == 0x8500 ||
-                   partnumber(asicid) == 0x8520)
-                       /* DB8500v2 */
-                       break;
-
-               /* DB5500v1 */
-               addr = 0x9001FFF4;
-               break;
-
-       case 0x413fc090: /* DB9540 */
-               addr = 0xFFFFDBF4;
-               break;
-       }
-
-       if (addr)
-               asicid = ux500_read_asicid(addr);
-
-       if (!asicid) {
-               pr_err("Unable to identify SoC\n");
-               ux500_unknown_soc();
-       }
-
-       dbx500_id.process = asicid >> 24;
-       dbx500_id.partnumber = partnumber(asicid);
-       dbx500_id.revision = asicid & 0xff;
-
-       ux500_print_soc_info(asicid);
-}
diff --git a/arch/arm/mach-ux500/id.h b/arch/arm/mach-ux500/id.h
deleted file mode 100644 (file)
index bcc58a8..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (C) ST-Ericsson SA 2010
- *
- * Author: Rabin Vincent <rabin.vincent@stericsson.com> for ST-Ericsson
- * License terms: GNU General Public License (GPL) version 2
- */
-
-#ifndef __MACH_UX500_ID
-#define __MACH_UX500_ID
-
-/**
- * struct dbx500_asic_id - fields of the ASIC ID
- * @process: the manufacturing process, 0x40 is 40 nm 0x00 is "standard"
- * @partnumber: hithereto 0x8500 for DB8500
- * @revision: version code in the series
- */
-struct dbx500_asic_id {
-       u16     partnumber;
-       u8      revision;
-       u8      process;
-};
-
-extern struct dbx500_asic_id dbx500_id;
-
-static inline unsigned int __attribute_const__ dbx500_partnumber(void)
-{
-       return dbx500_id.partnumber;
-}
-
-static inline unsigned int __attribute_const__ dbx500_revision(void)
-{
-       return dbx500_id.revision;
-}
-
-/*
- * SOCs
- */
-
-static inline bool __attribute_const__ cpu_is_u8500(void)
-{
-       return dbx500_partnumber() == 0x8500;
-}
-
-static inline bool __attribute_const__ cpu_is_u8520(void)
-{
-       return dbx500_partnumber() == 0x8520;
-}
-
-static inline bool cpu_is_u8500_family(void)
-{
-       return cpu_is_u8500() || cpu_is_u8520();
-}
-
-static inline bool __attribute_const__ cpu_is_u9540(void)
-{
-       return dbx500_partnumber() == 0x9540;
-}
-
-static inline bool __attribute_const__ cpu_is_u8540(void)
-{
-       return dbx500_partnumber() == 0x8540;
-}
-
-static inline bool __attribute_const__ cpu_is_u8580(void)
-{
-       return dbx500_partnumber() == 0x8580;
-}
-
-static inline bool cpu_is_ux540_family(void)
-{
-       return cpu_is_u9540() || cpu_is_u8540() || cpu_is_u8580();
-}
-
-/*
- * 8500 revisions
- */
-
-static inline bool __attribute_const__ cpu_is_u8500ed(void)
-{
-       return cpu_is_u8500() && dbx500_revision() == 0x00;
-}
-
-static inline bool __attribute_const__ cpu_is_u8500v1(void)
-{
-       return cpu_is_u8500() && (dbx500_revision() & 0xf0) == 0xA0;
-}
-
-static inline bool __attribute_const__ cpu_is_u8500v10(void)
-{
-       return cpu_is_u8500() && dbx500_revision() == 0xA0;
-}
-
-static inline bool __attribute_const__ cpu_is_u8500v11(void)
-{
-       return cpu_is_u8500() && dbx500_revision() == 0xA1;
-}
-
-static inline bool __attribute_const__ cpu_is_u8500v2(void)
-{
-       return cpu_is_u8500() && ((dbx500_revision() & 0xf0) == 0xB0);
-}
-
-static inline bool cpu_is_u8500v20(void)
-{
-       return cpu_is_u8500() && (dbx500_revision() == 0xB0);
-}
-
-static inline bool cpu_is_u8500v21(void)
-{
-       return cpu_is_u8500() && (dbx500_revision() == 0xB1);
-}
-
-static inline bool cpu_is_u8500v22(void)
-{
-       return cpu_is_u8500() && (dbx500_revision() == 0xB2);
-}
-
-static inline bool cpu_is_u8500v20_or_later(void)
-{
-       return (cpu_is_u8500() && !cpu_is_u8500v10() && !cpu_is_u8500v11());
-}
-
-/*
- * 8540 revisions
- */
-
-static inline bool __attribute_const__ cpu_is_u8540v10(void)
-{
-       return cpu_is_u8540() && dbx500_revision() == 0xA0;
-}
-
-static inline bool __attribute_const__ cpu_is_u8580v10(void)
-{
-       return cpu_is_u8580() && dbx500_revision() == 0xA0;
-}
-
-static inline bool ux500_is_svp(void)
-{
-       return false;
-}
-
-#define ux500_unknown_soc()    BUG()
-
-#endif
index 88b8ab4..8f2f615 100644 (file)
@@ -26,7 +26,6 @@
 #include "setup.h"
 
 #include "db8500-regs.h"
-#include "id.h"
 
 /* Magic triggers in backup RAM */
 #define UX500_CPU1_JUMPADDR_OFFSET 0x1FF4
index c704254..988e7c7 100644 (file)
 #ifndef __ASM_ARCH_SETUP_H
 #define __ASM_ARCH_SETUP_H
 
-#include <asm/mach/arch.h>
-#include <linux/init.h>
-#include <linux/mfd/abx500/ab8500.h>
-
-void ux500_restart(enum reboot_mode mode, const char *cmd);
-
-void __init ux500_setup_id(void);
-
-extern void __init ux500_init_irq(void);
-
-extern struct device *ux500_soc_device_init(const char *soc_id);
-
 extern void ux500_cpu_die(unsigned int cpu);
 
 #endif /*  __ASM_ARCH_SETUP_H */
index 9a736d9..e960d68 100644 (file)
@@ -11,7 +11,6 @@
 #include <linux/of_address.h>
 #include <linux/clk-provider.h>
 #include <linux/mfd/dbx500-prcmu.h>
-#include <linux/platform_data/clk-ux500.h>
 #include "clk.h"
 
 #define PRCC_NUM_PERIPH_CLUSTERS 6
@@ -48,11 +47,6 @@ static struct clk *ux500_twocell_get(struct of_phandle_args *clkspec,
        return PRCC_SHOW(clk_data, base, bit);
 }
 
-static const struct of_device_id u8500_clk_of_match[] = {
-       { .compatible = "stericsson,u8500-clks", },
-       { },
-};
-
 /* CLKRST4 is missing making it hard to index things */
 enum clkrst_index {
        CLKRST1_INDEX = 0,
@@ -63,22 +57,15 @@ enum clkrst_index {
        CLKRST_MAX,
 };
 
-void u8500_clk_init(void)
+static void u8500_clk_init(struct device_node *np)
 {
        struct prcmu_fw_version *fw_version;
-       struct device_node *np = NULL;
        struct device_node *child = NULL;
        const char *sgaclk_parent = NULL;
        struct clk *clk, *rtc_clk, *twd_clk;
        u32 bases[CLKRST_MAX];
        int i;
 
-       if (of_have_populated_dt())
-               np = of_find_matching_node(NULL, u8500_clk_of_match);
-       if (!np) {
-               pr_err("Either DT or U8500 Clock node not found\n");
-               return;
-       }
        for (i = 0; i < ARRAY_SIZE(bases); i++) {
                struct resource r;
 
@@ -573,3 +560,4 @@ void u8500_clk_init(void)
                        of_clk_add_provider(child, of_clk_src_simple_get, twd_clk);
        }
 }
+CLK_OF_DECLARE(u8500_clks, "stericsson,u8500-clks", u8500_clk_init);
index 86549e5..133859f 100644 (file)
 #include <linux/clkdev.h>
 #include <linux/clk-provider.h>
 #include <linux/mfd/dbx500-prcmu.h>
-#include <linux/platform_data/clk-ux500.h>
 #include "clk.h"
 
-static const struct of_device_id u8540_clk_of_match[] = {
-       { .compatible = "stericsson,u8540-clks", },
-       { }
-};
-
 /* CLKRST4 is missing making it hard to index things */
 enum clkrst_index {
        CLKRST1_INDEX = 0,
@@ -30,19 +24,12 @@ enum clkrst_index {
        CLKRST_MAX,
 };
 
-void u8540_clk_init(void)
+static void u8540_clk_init(struct device_node *np)
 {
        struct clk *clk;
-       struct device_node *np = NULL;
        u32 bases[CLKRST_MAX];
        int i;
 
-       if (of_have_populated_dt())
-               np = of_find_matching_node(NULL, u8540_clk_of_match);
-       if (!np) {
-               pr_err("Either DT or U8540 Clock node not found\n");
-               return;
-       }
        for (i = 0; i < ARRAY_SIZE(bases); i++) {
                struct resource r;
 
@@ -607,3 +594,4 @@ void u8540_clk_init(void)
                        bases[CLKRST6_INDEX], BIT(0), CLK_SET_RATE_GATE);
        clk_register_clkdev(clk, NULL, "rng");
 }
+CLK_OF_DECLARE(u8540_clks, "stericsson,u8540-clks", u8540_clk_init);
index 2138a4c..7b6bca4 100644 (file)
@@ -9,10 +9,10 @@
 
 #include <linux/clk-provider.h>
 #include <linux/mfd/dbx500-prcmu.h>
-#include <linux/platform_data/clk-ux500.h>
 #include "clk.h"
 
-void u9540_clk_init(void)
+static void u9540_clk_init(struct device_node *np)
 {
        /* register clocks here */
 }
+CLK_OF_DECLARE(u9540_clks, "stericsson,u9540-clks", u9540_clk_init);
index f3d6891..589eebf 100644 (file)
@@ -1087,7 +1087,6 @@ static int ab8500_probe(struct platform_device *pdev)
                "Vbus Detect (USB)",
                "USB ID Detect",
                "UART Factory Mode Detect"};
-       struct ab8500_platform_data *plat = dev_get_platdata(&pdev->dev);
        const struct platform_device_id *platid = platform_get_device_id(pdev);
        enum ab8500_version version = AB8500_VERSION_UNDEFINED;
        struct device_node *np = pdev->dev.of_node;
@@ -1219,9 +1218,6 @@ static int ab8500_probe(struct platform_device *pdev)
                pr_cont("None\n");
        }
 
-       if (plat && plat->init)
-               plat->init(ab8500);
-
        if (is_ab9540(ab8500)) {
                ret = get_register_interruptible(ab8500, AB8500_CHARGER,
                        AB8500_CH_USBCH_STAT1_REG, &value);
index b9f0010..207cc49 100644 (file)
@@ -127,45 +127,11 @@ EXPORT_SYMBOL(ab8500_sysctrl_write);
 
 static int ab8500_sysctrl_probe(struct platform_device *pdev)
 {
-       struct ab8500 *ab8500 = dev_get_drvdata(pdev->dev.parent);
-       struct ab8500_platform_data *plat;
-       struct ab8500_sysctrl_platform_data *pdata;
-
-       plat = dev_get_platdata(pdev->dev.parent);
-
-       if (!plat)
-               return -EINVAL;
-
        sysctrl_dev = &pdev->dev;
 
        if (!pm_power_off)
                pm_power_off = ab8500_power_off;
 
-       pdata = plat->sysctrl;
-       if (pdata) {
-               int last, ret, i, j;
-
-               if (is_ab8505(ab8500))
-                       last = AB8500_SYSCLKREQ4RFCLKBUF;
-               else
-                       last = AB8500_SYSCLKREQ8RFCLKBUF;
-
-               for (i = AB8500_SYSCLKREQ1RFCLKBUF; i <= last; i++) {
-                       j = i - AB8500_SYSCLKREQ1RFCLKBUF;
-                       ret = ab8500_sysctrl_write(i, 0xff,
-                                       pdata->initial_req_buf_config[j]);
-                       dev_dbg(&pdev->dev,
-                                       "Setting SysClkReq%dRfClkBuf 0x%X\n",
-                                       j + 1,
-                                       pdata->initial_req_buf_config[j]);
-                       if (ret < 0) {
-                               dev_err(&pdev->dev,
-                                       "Can't set sysClkReq%dRfClkBuf: %d\n",
-                                       j + 1, ret);
-                       }
-               }
-       }
-
        return 0;
 }
 
index c0a86ae..388e268 100644 (file)
@@ -3094,8 +3094,7 @@ static void db8500_prcmu_update_cpufreq(void)
        }
 }
 
-static int db8500_prcmu_register_ab8500(struct device *parent,
-                                       struct ab8500_platform_data *pdata)
+static int db8500_prcmu_register_ab8500(struct device *parent)
 {
        struct device_node *np;
        struct resource ab8500_resource;
@@ -3103,8 +3102,6 @@ static int db8500_prcmu_register_ab8500(struct device *parent,
                .name = "ab8500-core",
                .of_compatible = "stericsson,ab8500",
                .id = AB8500_VERSION_AB8500,
-               .platform_data = pdata,
-               .pdata_size = sizeof(struct ab8500_platform_data),
                .resources = &ab8500_resource,
                .num_resources = 1,
        };
@@ -3133,7 +3130,6 @@ static int db8500_prcmu_register_ab8500(struct device *parent,
 static int db8500_prcmu_probe(struct platform_device *pdev)
 {
        struct device_node *np = pdev->dev.of_node;
-       struct prcmu_pdata *pdata = dev_get_platdata(&pdev->dev);
        int irq = 0, err = 0;
        struct resource *res;
 
@@ -3149,7 +3145,7 @@ static int db8500_prcmu_probe(struct platform_device *pdev)
                return -ENOMEM;
        }
        init_prcm_registers();
-       dbx500_fw_version_init(pdev, pdata->version_offset);
+       dbx500_fw_version_init(pdev, DB8500_PRCMU_FW_VERSION_OFFSET);
        res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "prcmu-tcdm");
        if (!res) {
                dev_err(&pdev->dev, "no prcmu tcdm region provided\n");
@@ -3204,7 +3200,7 @@ static int db8500_prcmu_probe(struct platform_device *pdev)
                }
        }
 
-       err = db8500_prcmu_register_ab8500(&pdev->dev, pdata->ab_platdata);
+       err = db8500_prcmu_register_ab8500(&pdev->dev);
        if (err) {
                mfd_remove_devices(&pdev->dev);
                pr_err("prcmu: Failed to add ab8500 subdevice\n");
index 84c1ee3..2ca0004 100644 (file)
 #include <linux/mfd/abx500/ab8500.h>
 #include <linux/regulator/ab8500.h>
 
+static struct regulator_consumer_supply ab8500_vaux1_consumers[] = {
+       /* Main display, u8500 R3 uib */
+       REGULATOR_SUPPLY("vddi", "mcde_disp_sony_acx424akp.0"),
+       /* Main display, u8500 uib and ST uib */
+       REGULATOR_SUPPLY("vdd1", "samsung_s6d16d0.0"),
+       /* Secondary display, ST uib */
+       REGULATOR_SUPPLY("vdd1", "samsung_s6d16d0.1"),
+       /* SFH7741 proximity sensor */
+       REGULATOR_SUPPLY("vcc", "gpio-keys.0"),
+       /* BH1780GLS ambient light sensor */
+       REGULATOR_SUPPLY("vcc", "2-0029"),
+       /* lsm303dlh accelerometer */
+       REGULATOR_SUPPLY("vdd", "2-0018"),
+       /* lsm303dlhc accelerometer */
+       REGULATOR_SUPPLY("vdd", "2-0019"),
+       /* lsm303dlh magnetometer */
+       REGULATOR_SUPPLY("vdd", "2-001e"),
+       /* Rohm BU21013 Touchscreen devices */
+       REGULATOR_SUPPLY("avdd", "3-005c"),
+       REGULATOR_SUPPLY("avdd", "3-005d"),
+       /* Synaptics RMI4 Touchscreen device */
+       REGULATOR_SUPPLY("vdd", "3-004b"),
+       /* L3G4200D Gyroscope device */
+       REGULATOR_SUPPLY("vdd", "2-0068"),
+       /* Ambient light sensor device */
+       REGULATOR_SUPPLY("vdd", "3-0029"),
+       /* Pressure sensor device */
+       REGULATOR_SUPPLY("vdd", "2-005c"),
+       /* Cypress TrueTouch Touchscreen device */
+       REGULATOR_SUPPLY("vcpin", "spi8.0"),
+       /* Camera device */
+       REGULATOR_SUPPLY("vaux12v5", "mmio_camera"),
+};
+
+static struct regulator_consumer_supply ab8500_vaux2_consumers[] = {
+       /* On-board eMMC power */
+       REGULATOR_SUPPLY("vmmc", "sdi4"),
+       /* AB8500 audio codec */
+       REGULATOR_SUPPLY("vcc-N2158", "ab8500-codec.0"),
+       /* AB8500 accessory detect 1 */
+       REGULATOR_SUPPLY("vcc-N2158", "ab8500-acc-det.0"),
+       /* AB8500 Tv-out device */
+       REGULATOR_SUPPLY("vcc-N2158", "mcde_tv_ab8500.4"),
+       /* AV8100 HDMI device */
+       REGULATOR_SUPPLY("vcc-N2158", "av8100_hdmi.3"),
+};
+
+static struct regulator_consumer_supply ab8500_vaux3_consumers[] = {
+       REGULATOR_SUPPLY("v-SD-STM", "stm"),
+       /* External MMC slot power */
+       REGULATOR_SUPPLY("vmmc", "sdi0"),
+};
+
+static struct regulator_consumer_supply ab8500_vtvout_consumers[] = {
+       /* TV-out DENC supply */
+       REGULATOR_SUPPLY("vtvout", "ab8500-denc.0"),
+       /* Internal general-purpose ADC */
+       REGULATOR_SUPPLY("vddadc", "ab8500-gpadc.0"),
+       /* ADC for charger */
+       REGULATOR_SUPPLY("vddadc", "ab8500-charger.0"),
+       /* AB8500 Tv-out device */
+       REGULATOR_SUPPLY("vtvout", "mcde_tv_ab8500.4"),
+};
+
+static struct regulator_consumer_supply ab8500_vaud_consumers[] = {
+       /* AB8500 audio-codec main supply */
+       REGULATOR_SUPPLY("vaud", "ab8500-codec.0"),
+};
+
+static struct regulator_consumer_supply ab8500_vamic1_consumers[] = {
+       /* AB8500 audio-codec Mic1 supply */
+       REGULATOR_SUPPLY("vamic1", "ab8500-codec.0"),
+};
+
+static struct regulator_consumer_supply ab8500_vamic2_consumers[] = {
+       /* AB8500 audio-codec Mic2 supply */
+       REGULATOR_SUPPLY("vamic2", "ab8500-codec.0"),
+};
+
+static struct regulator_consumer_supply ab8500_vdmic_consumers[] = {
+       /* AB8500 audio-codec DMic supply */
+       REGULATOR_SUPPLY("vdmic", "ab8500-codec.0"),
+};
+
+static struct regulator_consumer_supply ab8500_vintcore_consumers[] = {
+       /* SoC core supply, no device */
+       REGULATOR_SUPPLY("v-intcore", NULL),
+       /* USB Transceiver */
+       REGULATOR_SUPPLY("vddulpivio18", "ab8500-usb.0"),
+       /* Handled by abx500 clk driver */
+       REGULATOR_SUPPLY("v-intcore", "abx500-clk.0"),
+};
+
+static struct regulator_consumer_supply ab8500_vana_consumers[] = {
+       /* DB8500 DSI */
+       REGULATOR_SUPPLY("vdddsi1v2", "mcde"),
+       REGULATOR_SUPPLY("vdddsi1v2", "b2r2_core"),
+       REGULATOR_SUPPLY("vdddsi1v2", "b2r2_1_core"),
+       REGULATOR_SUPPLY("vdddsi1v2", "dsilink.0"),
+       REGULATOR_SUPPLY("vdddsi1v2", "dsilink.1"),
+       REGULATOR_SUPPLY("vdddsi1v2", "dsilink.2"),
+       /* DB8500 CSI */
+       REGULATOR_SUPPLY("vddcsi1v2", "mmio_camera"),
+};
+
+/* ab8500 regulator register initialization */
+static struct ab8500_regulator_reg_init ab8500_reg_init[] = {
+       /*
+        * VanaRequestCtrl          = HP/LP depending on VxRequest
+        * VextSupply1RequestCtrl   = HP/LP depending on VxRequest
+        */
+       INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL2,       0xf0, 0x00),
+       /*
+        * VextSupply2RequestCtrl   = HP/LP depending on VxRequest
+        * VextSupply3RequestCtrl   = HP/LP depending on VxRequest
+        * Vaux1RequestCtrl         = HP/LP depending on VxRequest
+        * Vaux2RequestCtrl         = HP/LP depending on VxRequest
+        */
+       INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL3,       0xff, 0x00),
+       /*
+        * Vaux3RequestCtrl         = HP/LP depending on VxRequest
+        * SwHPReq                  = Control through SWValid disabled
+        */
+       INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL4,       0x07, 0x00),
+       /*
+        * VanaSysClkReq1HPValid    = disabled
+        * Vaux1SysClkReq1HPValid   = disabled
+        * Vaux2SysClkReq1HPValid   = disabled
+        * Vaux3SysClkReq1HPValid   = disabled
+        */
+       INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQ1HPVALID1, 0xe8, 0x00),
+       /*
+        * VextSupply1SysClkReq1HPValid = disabled
+        * VextSupply2SysClkReq1HPValid = disabled
+        * VextSupply3SysClkReq1HPValid = SysClkReq1 controlled
+        */
+       INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQ1HPVALID2, 0x70, 0x40),
+       /*
+        * VanaHwHPReq1Valid        = disabled
+        * Vaux1HwHPreq1Valid       = disabled
+        * Vaux2HwHPReq1Valid       = disabled
+        * Vaux3HwHPReqValid        = disabled
+        */
+       INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ1VALID1,     0xe8, 0x00),
+       /*
+        * VextSupply1HwHPReq1Valid = disabled
+        * VextSupply2HwHPReq1Valid = disabled
+        * VextSupply3HwHPReq1Valid = disabled
+        */
+       INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ1VALID2,     0x07, 0x00),
+       /*
+        * VanaHwHPReq2Valid        = disabled
+        * Vaux1HwHPReq2Valid       = disabled
+        * Vaux2HwHPReq2Valid       = disabled
+        * Vaux3HwHPReq2Valid       = disabled
+        */
+       INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ2VALID1,     0xe8, 0x00),
+       /*
+        * VextSupply1HwHPReq2Valid = disabled
+        * VextSupply2HwHPReq2Valid = disabled
+        * VextSupply3HwHPReq2Valid = HWReq2 controlled
+        */
+       INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ2VALID2,     0x07, 0x04),
+       /*
+        * VanaSwHPReqValid         = disabled
+        * Vaux1SwHPReqValid        = disabled
+        */
+       INIT_REGULATOR_REGISTER(AB8500_REGUSWHPREQVALID1,      0xa0, 0x00),
+       /*
+        * Vaux2SwHPReqValid        = disabled
+        * Vaux3SwHPReqValid        = disabled
+        * VextSupply1SwHPReqValid  = disabled
+        * VextSupply2SwHPReqValid  = disabled
+        * VextSupply3SwHPReqValid  = disabled
+        */
+       INIT_REGULATOR_REGISTER(AB8500_REGUSWHPREQVALID2,      0x1f, 0x00),
+       /*
+        * SysClkReq2Valid1         = SysClkReq2 controlled
+        * SysClkReq3Valid1         = disabled
+        * SysClkReq4Valid1         = SysClkReq4 controlled
+        * SysClkReq5Valid1         = disabled
+        * SysClkReq6Valid1         = SysClkReq6 controlled
+        * SysClkReq7Valid1         = disabled
+        * SysClkReq8Valid1         = disabled
+        */
+       INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQVALID1,    0xfe, 0x2a),
+       /*
+        * SysClkReq2Valid2         = disabled
+        * SysClkReq3Valid2         = disabled
+        * SysClkReq4Valid2         = disabled
+        * SysClkReq5Valid2         = disabled
+        * SysClkReq6Valid2         = SysClkReq6 controlled
+        * SysClkReq7Valid2         = disabled
+        * SysClkReq8Valid2         = disabled
+        */
+       INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQVALID2,    0xfe, 0x20),
+       /*
+        * VTVoutEna                = disabled
+        * Vintcore12Ena            = disabled
+        * Vintcore12Sel            = 1.25 V
+        * Vintcore12LP             = inactive (HP)
+        * VTVoutLP                 = inactive (HP)
+        */
+       INIT_REGULATOR_REGISTER(AB8500_REGUMISC1,              0xfe, 0x10),
+       /*
+        * VaudioEna                = disabled
+        * VdmicEna                 = disabled
+        * Vamic1Ena                = disabled
+        * Vamic2Ena                = disabled
+        */
+       INIT_REGULATOR_REGISTER(AB8500_VAUDIOSUPPLY,           0x1e, 0x00),
+       /*
+        * Vamic1_dzout             = high-Z when Vamic1 is disabled
+        * Vamic2_dzout             = high-Z when Vamic2 is disabled
+        */
+       INIT_REGULATOR_REGISTER(AB8500_REGUCTRL1VAMIC,         0x03, 0x00),
+       /*
+        * VPll                     = Hw controlled (NOTE! PRCMU bits)
+        * VanaRegu                 = force off
+        */
+       INIT_REGULATOR_REGISTER(AB8500_VPLLVANAREGU,           0x0f, 0x02),
+       /*
+        * VrefDDREna               = disabled
+        * VrefDDRSleepMode         = inactive (no pulldown)
+        */
+       INIT_REGULATOR_REGISTER(AB8500_VREFDDR,                0x03, 0x00),
+       /*
+        * VextSupply1Regu          = force LP
+        * VextSupply2Regu          = force OFF
+        * VextSupply3Regu          = force HP (-> STBB2=LP and TPS=LP)
+        * ExtSupply2Bypass         = ExtSupply12LPn ball is 0 when Ena is 0
+        * ExtSupply3Bypass         = ExtSupply3LPn ball is 0 when Ena is 0
+        */
+       INIT_REGULATOR_REGISTER(AB8500_EXTSUPPLYREGU,          0xff, 0x13),
+       /*
+        * Vaux1Regu                = force HP
+        * Vaux2Regu                = force off
+        */
+       INIT_REGULATOR_REGISTER(AB8500_VAUX12REGU,             0x0f, 0x01),
+       /*
+        * Vaux3Regu                = force off
+        */
+       INIT_REGULATOR_REGISTER(AB8500_VRF1VAUX3REGU,          0x03, 0x00),
+       /*
+        * Vaux1Sel                 = 2.8 V
+        */
+       INIT_REGULATOR_REGISTER(AB8500_VAUX1SEL,               0x0f, 0x0C),
+       /*
+        * Vaux2Sel                 = 2.9 V
+        */
+       INIT_REGULATOR_REGISTER(AB8500_VAUX2SEL,               0x0f, 0x0d),
+       /*
+        * Vaux3Sel                 = 2.91 V
+        */
+       INIT_REGULATOR_REGISTER(AB8500_VRF1VAUX3SEL,           0x07, 0x07),
+       /*
+        * VextSupply12LP           = disabled (no LP)
+        */
+       INIT_REGULATOR_REGISTER(AB8500_REGUCTRL2SPARE,         0x01, 0x00),
+       /*
+        * Vaux1Disch               = short discharge time
+        * Vaux2Disch               = short discharge time
+        * Vaux3Disch               = short discharge time
+        * Vintcore12Disch          = short discharge time
+        * VTVoutDisch              = short discharge time
+        * VaudioDisch              = short discharge time
+        */
+       INIT_REGULATOR_REGISTER(AB8500_REGUCTRLDISCH,          0xfc, 0x00),
+       /*
+        * VanaDisch                = short discharge time
+        * VdmicPullDownEna         = pulldown disabled when Vdmic is disabled
+        * VdmicDisch               = short discharge time
+        */
+       INIT_REGULATOR_REGISTER(AB8500_REGUCTRLDISCH2,         0x16, 0x00),
+};
+
+/* AB8500 regulators */
+static struct regulator_init_data ab8500_regulators[AB8500_NUM_REGULATORS] = {
+       /* supplies to the display/camera */
+       [AB8500_LDO_AUX1] = {
+               .supply_regulator = "ab8500-ext-supply3",
+               .constraints = {
+                       .name = "V-DISPLAY",
+                       .min_uV = 2800000,
+                       .max_uV = 3300000,
+                       .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
+                                         REGULATOR_CHANGE_STATUS,
+                       .boot_on = 1, /* display is on at boot */
+               },
+               .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux1_consumers),
+               .consumer_supplies = ab8500_vaux1_consumers,
+       },
+       /* supplies to the on-board eMMC */
+       [AB8500_LDO_AUX2] = {
+               .supply_regulator = "ab8500-ext-supply3",
+               .constraints = {
+                       .name = "V-eMMC1",
+                       .min_uV = 1100000,
+                       .max_uV = 3300000,
+                       .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
+                                         REGULATOR_CHANGE_STATUS |
+                                         REGULATOR_CHANGE_MODE,
+                       .valid_modes_mask = REGULATOR_MODE_NORMAL |
+                                           REGULATOR_MODE_IDLE,
+               },
+               .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux2_consumers),
+               .consumer_supplies = ab8500_vaux2_consumers,
+       },
+       /* supply for VAUX3, supplies to SDcard slots */
+       [AB8500_LDO_AUX3] = {
+               .supply_regulator = "ab8500-ext-supply3",
+               .constraints = {
+                       .name = "V-MMC-SD",
+                       .min_uV = 1100000,
+                       .max_uV = 3300000,
+                       .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
+                                         REGULATOR_CHANGE_STATUS |
+                                         REGULATOR_CHANGE_MODE,
+                       .valid_modes_mask = REGULATOR_MODE_NORMAL |
+                                           REGULATOR_MODE_IDLE,
+               },
+               .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux3_consumers),
+               .consumer_supplies = ab8500_vaux3_consumers,
+       },
+       /* supply for tvout, gpadc, TVOUT LDO */
+       [AB8500_LDO_TVOUT] = {
+               .constraints = {
+                       .name = "V-TVOUT",
+                       .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+               },
+               .num_consumer_supplies = ARRAY_SIZE(ab8500_vtvout_consumers),
+               .consumer_supplies = ab8500_vtvout_consumers,
+       },
+       /* supply for ab8500-vaudio, VAUDIO LDO */
+       [AB8500_LDO_AUDIO] = {
+               .constraints = {
+                       .name = "V-AUD",
+                       .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+               },
+               .num_consumer_supplies = ARRAY_SIZE(ab8500_vaud_consumers),
+               .consumer_supplies = ab8500_vaud_consumers,
+       },
+       /* supply for v-anamic1 VAMic1-LDO */
+       [AB8500_LDO_ANAMIC1] = {
+               .constraints = {
+                       .name = "V-AMIC1",
+                       .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+               },
+               .num_consumer_supplies = ARRAY_SIZE(ab8500_vamic1_consumers),
+               .consumer_supplies = ab8500_vamic1_consumers,
+       },
+       /* supply for v-amic2, VAMIC2 LDO, reuse constants for AMIC1 */
+       [AB8500_LDO_ANAMIC2] = {
+               .constraints = {
+                       .name = "V-AMIC2",
+                       .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+               },
+               .num_consumer_supplies = ARRAY_SIZE(ab8500_vamic2_consumers),
+               .consumer_supplies = ab8500_vamic2_consumers,
+       },
+       /* supply for v-dmic, VDMIC LDO */
+       [AB8500_LDO_DMIC] = {
+               .constraints = {
+                       .name = "V-DMIC",
+                       .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+               },
+               .num_consumer_supplies = ARRAY_SIZE(ab8500_vdmic_consumers),
+               .consumer_supplies = ab8500_vdmic_consumers,
+       },
+       /* supply for v-intcore12, VINTCORE12 LDO */
+       [AB8500_LDO_INTCORE] = {
+               .constraints = {
+                       .name = "V-INTCORE",
+                       .min_uV = 1250000,
+                       .max_uV = 1350000,
+                       .input_uV = 1800000,
+                       .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
+                                         REGULATOR_CHANGE_STATUS |
+                                         REGULATOR_CHANGE_MODE |
+                                         REGULATOR_CHANGE_DRMS,
+                       .valid_modes_mask = REGULATOR_MODE_NORMAL |
+                                           REGULATOR_MODE_IDLE,
+               },
+               .num_consumer_supplies = ARRAY_SIZE(ab8500_vintcore_consumers),
+               .consumer_supplies = ab8500_vintcore_consumers,
+       },
+       /* supply for U8500 CSI-DSI, VANA LDO */
+       [AB8500_LDO_ANA] = {
+               .constraints = {
+                       .name = "V-CSI-DSI",
+                       .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+               },
+               .num_consumer_supplies = ARRAY_SIZE(ab8500_vana_consumers),
+               .consumer_supplies = ab8500_vana_consumers,
+       },
+};
+
+/* supply for VextSupply3 */
+static struct regulator_consumer_supply ab8500_ext_supply3_consumers[] = {
+       /* SIM supply for 3 V SIM cards */
+       REGULATOR_SUPPLY("vinvsim", "sim-detect.0"),
+};
+
+/*
+ * AB8500 external regulators
+ */
+static struct regulator_init_data ab8500_ext_regulators[] = {
+       /* fixed Vbat supplies VSMPS1_EXT_1V8 */
+       [AB8500_EXT_SUPPLY1] = {
+               .constraints = {
+                       .name = "ab8500-ext-supply1",
+                       .min_uV = 1800000,
+                       .max_uV = 1800000,
+                       .initial_mode = REGULATOR_MODE_IDLE,
+                       .boot_on = 1,
+                       .always_on = 1,
+               },
+       },
+       /* fixed Vbat supplies VSMPS2_EXT_1V36 and VSMPS5_EXT_1V15 */
+       [AB8500_EXT_SUPPLY2] = {
+               .constraints = {
+                       .name = "ab8500-ext-supply2",
+                       .min_uV = 1360000,
+                       .max_uV = 1360000,
+               },
+       },
+       /* fixed Vbat supplies VSMPS3_EXT_3V4 and VSMPS4_EXT_3V4 */
+       [AB8500_EXT_SUPPLY3] = {
+               .constraints = {
+                       .name = "ab8500-ext-supply3",
+                       .min_uV = 3400000,
+                       .max_uV = 3400000,
+                       .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+                       .boot_on = 1,
+               },
+               .num_consumer_supplies =
+                       ARRAY_SIZE(ab8500_ext_supply3_consumers),
+               .consumer_supplies = ab8500_ext_supply3_consumers,
+       },
+};
+
+static struct ab8500_regulator_platform_data ab8500_regulator_plat_data = {
+       .reg_init               = ab8500_reg_init,
+       .num_reg_init           = ARRAY_SIZE(ab8500_reg_init),
+       .regulator              = ab8500_regulators,
+       .num_regulator          = ARRAY_SIZE(ab8500_regulators),
+       .ext_regulator          = ab8500_ext_regulators,
+       .num_ext_regulator      = ARRAY_SIZE(ab8500_ext_regulators),
+};
+
 /**
  * struct ab8500_ext_regulator_info - ab8500 regulator information
  * @dev: device pointer
@@ -344,8 +794,7 @@ static struct of_regulator_match ab8500_ext_regulator_match[] = {
 static int ab8500_ext_regulator_probe(struct platform_device *pdev)
 {
        struct ab8500 *ab8500 = dev_get_drvdata(pdev->dev.parent);
-       struct ab8500_platform_data *ppdata;
-       struct ab8500_regulator_platform_data *pdata;
+       struct ab8500_regulator_platform_data *pdata = &ab8500_regulator_plat_data;
        struct device_node *np = pdev->dev.of_node;
        struct regulator_config config = { };
        int i, err;
@@ -366,18 +815,6 @@ static int ab8500_ext_regulator_probe(struct platform_device *pdev)
                return -EINVAL;
        }
 
-       ppdata = dev_get_platdata(ab8500->dev);
-       if (!ppdata) {
-               dev_err(&pdev->dev, "null parent pdata\n");
-               return -EINVAL;
-       }
-
-       pdata = ppdata->regulator;
-       if (!pdata) {
-               dev_err(&pdev->dev, "null pdata\n");
-               return -EINVAL;
-       }
-
        /* make sure the platform data has the correct size */
        if (pdata->num_ext_regulator != ARRAY_SIZE(ab8500_ext_regulator_info)) {
                dev_err(&pdev->dev, "Configuration error: size mismatch.\n");
index 91d5c05..fe42a2f 100644 (file)
@@ -9,6 +9,7 @@ source "drivers/soc/samsung/Kconfig"
 source "drivers/soc/sunxi/Kconfig"
 source "drivers/soc/tegra/Kconfig"
 source "drivers/soc/ti/Kconfig"
+source "drivers/soc/ux500/Kconfig"
 source "drivers/soc/versatile/Kconfig"
 
 endmenu
index b75e3bd..50c23d0 100644 (file)
@@ -14,4 +14,5 @@ obj-$(CONFIG_SOC_SAMSUNG)     += samsung/
 obj-$(CONFIG_ARCH_SUNXI)       += sunxi/
 obj-$(CONFIG_ARCH_TEGRA)       += tegra/
 obj-$(CONFIG_SOC_TI)           += ti/
+obj-$(CONFIG_ARCH_U8500)       += ux500/
 obj-$(CONFIG_PLAT_VERSATILE)   += versatile/
diff --git a/drivers/soc/ux500/Kconfig b/drivers/soc/ux500/Kconfig
new file mode 100644 (file)
index 0000000..025a44a
--- /dev/null
@@ -0,0 +1,7 @@
+config UX500_SOC_ID
+       bool "SoC bus for ST-Ericsson ux500"
+       depends on ARCH_U8500 || COMPILE_TEST
+       default ARCH_U8500
+       help
+         Include support for the SoC bus on the ARM RealView platforms
+         providing some sysfs information about the ASIC variant.
diff --git a/drivers/soc/ux500/Makefile b/drivers/soc/ux500/Makefile
new file mode 100644 (file)
index 0000000..0b87ad0
--- /dev/null
@@ -0,0 +1 @@
+obj-$(CONFIG_UX500_SOC_ID) += ux500-soc-id.o
diff --git a/drivers/soc/ux500/ux500-soc-id.c b/drivers/soc/ux500/ux500-soc-id.c
new file mode 100644 (file)
index 0000000..6c1be74
--- /dev/null
@@ -0,0 +1,222 @@
+/*
+ * Copyright (C) ST-Ericsson SA 2010
+ *
+ * Author: Rabin Vincent <rabin.vincent@stericsson.com> for ST-Ericsson
+ * License terms: GNU General Public License (GPL) version 2
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/io.h>
+#include <linux/module.h>
+#include <linux/random.h>
+#include <linux/slab.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/sys_soc.h>
+
+#include <asm/cputype.h>
+#include <asm/tlbflush.h>
+#include <asm/cacheflush.h>
+#include <asm/mach/map.h>
+
+/**
+ * struct dbx500_asic_id - fields of the ASIC ID
+ * @process: the manufacturing process, 0x40 is 40 nm 0x00 is "standard"
+ * @partnumber: hithereto 0x8500 for DB8500
+ * @revision: version code in the series
+ */
+struct dbx500_asic_id {
+       u16     partnumber;
+       u8      revision;
+       u8      process;
+};
+
+static struct dbx500_asic_id dbx500_id;
+
+static unsigned int __init ux500_read_asicid(phys_addr_t addr)
+{
+       void __iomem *virt = ioremap(addr, 4);
+       unsigned int asicid;
+
+       if (!virt)
+               return 0;
+
+       asicid = readl(virt);
+       iounmap(virt);
+
+       return asicid;
+}
+
+static void ux500_print_soc_info(unsigned int asicid)
+{
+       unsigned int rev = dbx500_id.revision;
+
+       pr_info("DB%4x ", dbx500_id.partnumber);
+
+       if (rev == 0x01)
+               pr_cont("Early Drop");
+       else if (rev >= 0xA0)
+               pr_cont("v%d.%d" , (rev >> 4) - 0xA + 1, rev & 0xf);
+       else
+               pr_cont("Unknown");
+
+       pr_cont(" [%#010x]\n", asicid);
+}
+
+static unsigned int partnumber(unsigned int asicid)
+{
+       return (asicid >> 8) & 0xffff;
+}
+
+/*
+ * SOC         MIDR            ASICID ADDRESS          ASICID VALUE
+ * DB8500ed    0x410fc090      0x9001FFF4              0x00850001
+ * DB8500v1    0x411fc091      0x9001FFF4              0x008500A0
+ * DB8500v1.1  0x411fc091      0x9001FFF4              0x008500A1
+ * DB8500v2    0x412fc091      0x9001DBF4              0x008500B0
+ * DB8520v2.2  0x412fc091      0x9001DBF4              0x008500B2
+ * DB5500v1    0x412fc091      0x9001FFF4              0x005500A0
+ * DB9540      0x413fc090      0xFFFFDBF4              0x009540xx
+ */
+
+static void __init ux500_setup_id(void)
+{
+       unsigned int cpuid = read_cpuid_id();
+       unsigned int asicid = 0;
+       phys_addr_t addr = 0;
+
+       switch (cpuid) {
+       case 0x410fc090: /* DB8500ed */
+       case 0x411fc091: /* DB8500v1 */
+               addr = 0x9001FFF4;
+               break;
+
+       case 0x412fc091: /* DB8520 / DB8500v2 / DB5500v1 */
+               asicid = ux500_read_asicid(0x9001DBF4);
+               if (partnumber(asicid) == 0x8500 ||
+                   partnumber(asicid) == 0x8520)
+                       /* DB8500v2 */
+                       break;
+
+               /* DB5500v1 */
+               addr = 0x9001FFF4;
+               break;
+
+       case 0x413fc090: /* DB9540 */
+               addr = 0xFFFFDBF4;
+               break;
+       }
+
+       if (addr)
+               asicid = ux500_read_asicid(addr);
+
+       if (!asicid) {
+               pr_err("Unable to identify SoC\n");
+               BUG();
+       }
+
+       dbx500_id.process = asicid >> 24;
+       dbx500_id.partnumber = partnumber(asicid);
+       dbx500_id.revision = asicid & 0xff;
+
+       ux500_print_soc_info(asicid);
+}
+
+static const char * __init ux500_get_machine(void)
+{
+       return kasprintf(GFP_KERNEL, "DB%4x", dbx500_id.partnumber);
+}
+
+static const char * __init ux500_get_family(void)
+{
+       return kasprintf(GFP_KERNEL, "ux500");
+}
+
+static const char * __init ux500_get_revision(void)
+{
+       unsigned int rev = dbx500_id.revision;
+
+       if (rev == 0x01)
+               return kasprintf(GFP_KERNEL, "%s", "ED");
+       else if (rev >= 0xA0)
+               return kasprintf(GFP_KERNEL, "%d.%d",
+                                (rev >> 4) - 0xA + 1, rev & 0xf);
+
+       return kasprintf(GFP_KERNEL, "%s", "Unknown");
+}
+
+static ssize_t ux500_get_process(struct device *dev,
+                                       struct device_attribute *attr,
+                                       char *buf)
+{
+       if (dbx500_id.process == 0x00)
+               return sprintf(buf, "Standard\n");
+
+       return sprintf(buf, "%02xnm\n", dbx500_id.process);
+}
+
+static const char *db8500_read_soc_id(struct device_node *backupram)
+{
+       void __iomem *base;
+       void __iomem *uid;
+       const char *retstr;
+
+       base = of_iomap(backupram, 0);
+       if (!base)
+               return NULL;
+       uid = base + 0x1fc0;
+
+       /* Throw these device-specific numbers into the entropy pool */
+       add_device_randomness(uid, 0x14);
+       retstr = kasprintf(GFP_KERNEL, "%08x%08x%08x%08x%08x",
+                        readl((u32 *)uid+0),
+                        readl((u32 *)uid+1), readl((u32 *)uid+2),
+                        readl((u32 *)uid+3), readl((u32 *)uid+4));
+       iounmap(base);
+       return retstr;
+}
+
+static void __init soc_info_populate(struct soc_device_attribute *soc_dev_attr,
+                                    struct device_node *backupram)
+{
+       soc_dev_attr->soc_id   = db8500_read_soc_id(backupram);
+       soc_dev_attr->machine  = ux500_get_machine();
+       soc_dev_attr->family   = ux500_get_family();
+       soc_dev_attr->revision = ux500_get_revision();
+}
+
+static const struct device_attribute ux500_soc_attr =
+       __ATTR(process,  S_IRUGO, ux500_get_process,  NULL);
+
+static int __init ux500_soc_device_init(void)
+{
+       struct device *parent;
+       struct soc_device *soc_dev;
+       struct soc_device_attribute *soc_dev_attr;
+       struct device_node *backupram;
+
+       backupram = of_find_compatible_node(NULL, NULL, "ste,dbx500-backupram");
+       if (!backupram)
+               return 0;
+
+       ux500_setup_id();
+
+       soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
+       if (!soc_dev_attr)
+               return -ENOMEM;
+
+       soc_info_populate(soc_dev_attr, backupram);
+
+       soc_dev = soc_device_register(soc_dev_attr);
+       if (IS_ERR(soc_dev)) {
+               kfree(soc_dev_attr);
+               return PTR_ERR(soc_dev);
+       }
+
+       parent = soc_device_to_device(soc_dev);
+       device_create_file(parent, &ux500_soc_attr);
+
+       return 0;
+}
+subsys_initcall(ux500_soc_device_init);
index 6893127..01024d1 100644 (file)
@@ -37,12 +37,6 @@ static inline int ab8500_sysctrl_clear(u16 reg, u8 bits)
        return ab8500_sysctrl_write(reg, bits, 0);
 }
 
-/* Configuration data for SysClkReq1RfClkBuf - SysClkReq8RfClkBuf */
-struct ab8500_sysctrl_platform_data {
-       u8 initial_req_buf_config[8];
-       u16 (*reboot_reason_code)(const char *cmd);
-};
-
 /* Registers */
 #define AB8500_TURNONSTATUS            0x100
 #define AB8500_RESETSTATUS             0x101
index bf5109d..5d37460 100644 (file)
@@ -178,16 +178,6 @@ enum ddr_pwrst {
 
 #define DB8500_PRCMU_LEGACY_OFFSET             0xDD4
 
-struct prcmu_pdata
-{
-       bool enable_set_ddr_opp;
-       bool enable_ape_opp_100_voltage;
-       struct ab8500_platform_data *ab_platdata;
-       u32 version_offset;
-       u32 legacy_offset;
-       u32 adt_offset;
-};
-
 #define PRCMU_FW_PROJECT_U8500         2
 #define PRCMU_FW_PROJECT_U8400         3
 #define PRCMU_FW_PROJECT_U9500         4 /* Customer specific */
diff --git a/include/linux/platform_data/clk-ux500.h b/include/linux/platform_data/clk-ux500.h
deleted file mode 100644 (file)
index 3af0da1..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Clock definitions for ux500 platforms
- *
- * Copyright (C) 2012 ST-Ericsson SA
- * Author: Ulf Hansson <ulf.hansson@linaro.org>
- *
- * License terms: GNU General Public License (GPL) version 2
- */
-
-#ifndef __CLK_UX500_H
-#define __CLK_UX500_H
-
-void u8500_clk_init(void);
-void u9540_clk_init(void);
-void u8540_clk_init(void);
-
-#endif /* __CLK_UX500_H */
index 8b1d0c1..2fc8915 100644 (file)
@@ -2464,45 +2464,20 @@ static int ab8500_codec_probe(struct snd_soc_codec *codec)
        struct device *dev = codec->dev;
        struct device_node *np = dev->of_node;
        struct ab8500_codec_drvdata *drvdata = dev_get_drvdata(dev);
-       struct ab8500_platform_data *pdata;
+       struct ab8500_codec_platform_data codec_pdata;
        struct filter_control *fc;
        int status;
 
        dev_dbg(dev, "%s: Enter.\n", __func__);
 
-       /* Setup AB8500 according to board-settings */
-       pdata = dev_get_platdata(dev->parent);
+       ab8500_codec_of_probe(dev, np, &codec_pdata);
 
-       if (np) {
-               if (!pdata)
-                       pdata = devm_kzalloc(dev,
-                                       sizeof(struct ab8500_platform_data),
-                                       GFP_KERNEL);
-
-               if (pdata && !pdata->codec)
-                       pdata->codec
-                               = devm_kzalloc(dev,
-                                       sizeof(struct ab8500_codec_platform_data),
-                                       GFP_KERNEL);
-
-               if (!(pdata && pdata->codec))
-                       return -ENOMEM;
-
-               ab8500_codec_of_probe(dev, np, pdata->codec);
-
-       } else {
-               if (!(pdata && pdata->codec)) {
-                       dev_err(dev, "No codec platform data or DT found\n");
-                       return -EINVAL;
-               }
-       }
-
-       status = ab8500_audio_setup_mics(codec, &pdata->codec->amics);
+       status = ab8500_audio_setup_mics(codec, &codec_pdata.amics);
        if (status < 0) {
                pr_err("%s: Failed to setup mics (%d)!\n", __func__, status);
                return status;
        }
-       status = ab8500_audio_set_ear_cmv(codec, pdata->codec->ear_cmv);
+       status = ab8500_audio_set_ear_cmv(codec, codec_pdata.ear_cmv);
        if (status < 0) {
                pr_err("%s: Failed to set earpiece CM-voltage (%d)!\n",
                        __func__, status);