]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/commitdiff
Merge branches 'ib-from-asoc-3.16', 'ib-from-pm-3.16', 'ib-from-regulator-3.16',...
authorLee Jones <lee.jones@linaro.org>
Tue, 3 Jun 2014 07:08:40 +0000 (08:08 +0100)
committerLee Jones <lee.jones@linaro.org>
Tue, 3 Jun 2014 07:08:40 +0000 (08:08 +0100)
1  2  3  4  5  6  7  8  9 
drivers/cpufreq/longhaul.c
drivers/cpufreq/powernow-k6.c
drivers/mfd/Kconfig
drivers/mfd/twl-core.c

index 5c4369b5d834d93f05095cf6052848ec2d2ddec4,d00e5d1abd258b469bf48862a5f14b08e04f97a7,f4024d4d35345b3a8f9f7a046a06ed4ea5d3e428,d00e5d1abd258b469bf48862a5f14b08e04f97a7,d00e5d1abd258b469bf48862a5f14b08e04f97a7,5c4369b5d834d93f05095cf6052848ec2d2ddec4,d00e5d1abd258b469bf48862a5f14b08e04f97a7,45bafddfd8ea488ba24362b44a8aa58bf58304eb,d00e5d1abd258b469bf48862a5f14b08e04f97a7..c913906a719ee0f9b44598593b4900c201395596
@@@@@@@@@@ -242,7 -242,7 -242,7 -242,7 -242,7 -242,7 -242,7 -242,7 -242,7 +242,7 @@@@@@@@@@ static void do_powersaver(int cx_addres
          * Sets a new clock ratio.
          */
         
 ---- ---static void longhaul_setstate(struct cpufreq_policy *policy,
 ++++ +++static int longhaul_setstate(struct cpufreq_policy *policy,
                        unsigned int table_index)
         {
                unsigned int mults_index;
                /* Safety precautions */
                mult = mults[mults_index & 0x1f];
                if (mult == -1)
 ---- ---               return;
 ++++ +++               return -EINVAL;
 ++++ +++
                speed = calc_speed(mult);
                if ((speed > highest_speed) || (speed < lowest_speed))
 ---- ---               return;
 ++++ +++               return -EINVAL;
 ++++ +++
                /* Voltage transition before frequency transition? */
                if (can_scale_voltage && longhaul_index < table_index)
                        dir = 1;
                freqs.old = calc_speed(longhaul_get_cpu_mult());
                freqs.new = speed;
         
 ---- - -       cpufreq_freq_transition_begin(policy, &freqs);
       -        cpufreq_notify_transition(policy, &freqs, CPUFREQ_PRECHANGE);
 ---- ---
                pr_debug("Setting to FSB:%dMHz Mult:%d.%dx (%s)\n",
                                fsb, mult/10, mult%10, print_speed(speed/1000));
         retry_loop:
                                goto retry_loop;
                        }
                }
 ---- ---       /* Report true CPU frequency */
 ---- - -       cpufreq_freq_transition_end(policy, &freqs, 0);
       -        cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE);
         
 ---- ---       if (!bm_timeout)
 ++++ +++       if (!bm_timeout) {
                        printk(KERN_INFO PFX "Warning: Timeout while waiting for "
                                        "idle PCI bus.\n");
 ++++ +++               return -EBUSY;
 ++++ +++       }
 ++++ +++
 ++++ +++       return 0;
         }
         
         /*
@@@@@@@@@@ -477,7 -475,7 -475,7 -475,7 -475,7 -477,7 -475,7 -475,7 -475,7 +477,7 @@@@@@@@@@ static int longhaul_get_ranges(void
                        return -EINVAL;
                }
         
       -        longhaul_table = kmalloc((numscales + 1) * sizeof(*longhaul_table),
       +        longhaul_table = kzalloc((numscales + 1) * sizeof(*longhaul_table),
                                GFP_KERNEL);
                if (!longhaul_table)
                        return -ENOMEM;
         
         static void longhaul_setup_voltagescaling(void)
         {
++ ++++++       struct cpufreq_frequency_table *freq_pos;
                union msr_longhaul longhaul;
                struct mV_pos minvid, maxvid, vid;
                unsigned int j, speed, pos, kHz_step, numvscales;
                /* Calculate kHz for one voltage step */
                kHz_step = (highest_speed - min_vid_speed) / numvscales;
         
-- ------       j = 0;
-- ------       while (longhaul_table[j].frequency != CPUFREQ_TABLE_END) {
-- ------               speed = longhaul_table[j].frequency;
++ ++++++       cpufreq_for_each_entry(freq_pos, longhaul_table) {
++ ++++++               speed = freq_pos->frequency;
                        if (speed > min_vid_speed)
                                pos = (speed - min_vid_speed) / kHz_step + minvid.pos;
                        else
                                pos = minvid.pos;
-- ------               longhaul_table[j].driver_data |= mV_vrm_table[pos] << 8;
++ ++++++               freq_pos->driver_data |= mV_vrm_table[pos] << 8;
                        vid = vrm_mV_table[mV_vrm_table[pos]];
                        printk(KERN_INFO PFX "f: %d kHz, index: %d, vid: %d mV\n",
-- ------                               speed, j, vid.mV);
-- ------               j++;
++ ++++++                       speed, (int)(freq_pos - longhaul_table), vid.mV);
                }
         
                can_scale_voltage = 1;
@@@@@@@@@@ -633,10 -631,9 -630,9 -631,9 -631,9 -633,10 -631,9 -631,9 -631,9 +632,10 @@@@@@@@@@ static int longhaul_target(struct cpufr
                unsigned int i;
                unsigned int dir = 0;
                u8 vid, current_vid;
 ++++ +++       int retval = 0;
         
                if (!can_scale_voltage)
 ---- ---               longhaul_setstate(policy, table_index);
 ++++ +++               retval = longhaul_setstate(policy, table_index);
                else {
                        /* On test system voltage transitions exceeding single
                         * step up or down were turning motherboard off. Both
                        while (i != table_index) {
                                vid = (longhaul_table[i].driver_data >> 8) & 0x1f;
                                if (vid != current_vid) {
 ---- ---                               longhaul_setstate(policy, i);
 ++++ +++                               retval = longhaul_setstate(policy, i);
                                        current_vid = vid;
                                        msleep(200);
                                }
                                else
                                        i--;
                        }
 ---- ---               longhaul_setstate(policy, table_index);
 ++++ +++               retval = longhaul_setstate(policy, table_index);
                }
 ++++ +++
                longhaul_index = table_index;
 ---- ---       return 0;
 ++++ +++       return retval;
         }
         
         
@@@@@@@@@@ -917,6 -913,6 -912,6 -913,6 -913,6 -917,6 -913,6 -913,7 -913,6 +916,6 @@@@@@@@@@ static struct cpufreq_driver longhaul_d
                .target_index = longhaul_target,
                .get    = longhaul_get,
                .init   = longhaul_cpu_init,
       -        .exit   = cpufreq_generic_exit,
                .name   = "longhaul",
                .attr   = cpufreq_generic_attr,
         };
@@@@@@@@@@ -972,15 -968,7 -967,7 -968,7 -968,7 -972,15 -968,7 -969,7 -968,7 +971,15 @@@@@@@@@@ static void __exit longhaul_exit(void
         
                for (i = 0; i < numscales; i++) {
                        if (mults[i] == maxmult) {
 ++++ +++                       struct cpufreq_freqs freqs;
 ++++ +++
 ++++ +++                       freqs.old = policy->cur;
 ++++ +++                       freqs.new = longhaul_table[i].frequency;
 ++++ +++                       freqs.flags = 0;
 ++++ +++
 ++++ +++                       cpufreq_freq_transition_begin(policy, &freqs);
                                longhaul_setstate(policy, i);
 ++++ +++                       cpufreq_freq_transition_end(policy, &freqs, 0);
                                break;
                        }
                }
index 78904e6ca4a020d53a60f4139711441a069ad447,49f120e1bc7be0ecb879f184424d1dc56ee63981,a133236a00130eab3618a75737299e9d00a047b5,49f120e1bc7be0ecb879f184424d1dc56ee63981,49f120e1bc7be0ecb879f184424d1dc56ee63981,78904e6ca4a020d53a60f4139711441a069ad447,49f120e1bc7be0ecb879f184424d1dc56ee63981,b9a444e358b5cfeb25da13739b374d02124cf011,49f120e1bc7be0ecb879f184424d1dc56ee63981..c8012bc869107206ad1fd7024ab86a76a406890e
@@@@@@@@@@ -37,15 -37,15 -37,15 -37,15 -37,15 -37,15 -37,15 -37,15 -37,15 +37,15 @@@@@@@@@@ MODULE_PARM_DESC(bus_frequency, "Bus fr
         
         /* Clock ratio multiplied by 10 - see table 27 in AMD#23446 */
         static struct cpufreq_frequency_table clock_ratio[] = {
       -        {60,  /* 110 -> 6.0x */ 0},
       -        {55,  /* 011 -> 5.5x */ 0},
       -        {50,  /* 001 -> 5.0x */ 0},
       -        {45,  /* 000 -> 4.5x */ 0},
       -        {40,  /* 010 -> 4.0x */ 0},
       -        {35,  /* 111 -> 3.5x */ 0},
       -        {30,  /* 101 -> 3.0x */ 0},
       -        {20,  /* 100 -> 2.0x */ 0},
       -        {0, CPUFREQ_TABLE_END}
       +        {0, 60,  /* 110 -> 6.0x */ 0},
       +        {0, 55,  /* 011 -> 5.5x */ 0},
       +        {0, 50,  /* 001 -> 5.0x */ 0},
       +        {0, 45,  /* 000 -> 4.5x */ 0},
       +        {0, 40,  /* 010 -> 4.0x */ 0},
       +        {0, 35,  /* 111 -> 3.5x */ 0},
       +        {0, 30,  /* 101 -> 3.0x */ 0},
       +        {0, 20,  /* 100 -> 2.0x */ 0},
       +        {0, 0, CPUFREQ_TABLE_END}
         };
         
         static const u8 index_to_register[8] = { 6, 3, 1, 0, 2, 7, 5, 4 };
@@@@@@@@@@ -138,19 -138,27 -138,28 -138,27 -138,27 -138,19 -138,27 -138,27 -138,27 +138,20 @@@@@@@@@@ static void powernow_k6_set_cpu_multipl
         static int powernow_k6_target(struct cpufreq_policy *policy,
                        unsigned int best_i)
         {
 ---- ---       struct cpufreq_freqs freqs;
         
                if (clock_ratio[best_i].driver_data > max_multiplier) {
                        printk(KERN_ERR PFX "invalid target frequency\n");
                        return -EINVAL;
                }
         
 ---- ---       freqs.old = busfreq * powernow_k6_get_cpu_multiplier();
 ---- ---       freqs.new = busfreq * clock_ratio[best_i].driver_data;
 ---- ---
 ---- - -       cpufreq_freq_transition_begin(policy, &freqs);
       -        cpufreq_notify_transition(policy, &freqs, CPUFREQ_PRECHANGE);
 ---- ---
                powernow_k6_set_cpu_multiplier(best_i);
         
 ---- - -       cpufreq_freq_transition_end(policy, &freqs, 0);
       -        cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE);
 ---- ---
                return 0;
         }
         
         static int powernow_k6_cpu_init(struct cpufreq_policy *policy)
         {
++ ++++++       struct cpufreq_frequency_table *pos;
                unsigned int i, f;
                unsigned khz;
         
                        }
                }
                if (param_max_multiplier) {
-- ------               for (i = 0; (clock_ratio[i].frequency != CPUFREQ_TABLE_END); i++) {
-- ------                       if (clock_ratio[i].driver_data == param_max_multiplier) {
++ ++++++               cpufreq_for_each_entry(pos, clock_ratio)
++ ++++++                       if (pos->driver_data == param_max_multiplier) {
                                        max_multiplier = param_max_multiplier;
                                        goto have_max_multiplier;
                                }
-- ------               }
                        printk(KERN_ERR "powernow-k6: invalid max_multiplier parameter, valid parameters 20, 30, 35, 40, 45, 50, 55, 60\n");
                        return -EINVAL;
                }
                param_busfreq = busfreq * 10;
         
                /* table init */
-- ------       for (i = 0; (clock_ratio[i].frequency != CPUFREQ_TABLE_END); i++) {
-- ------               f = clock_ratio[i].driver_data;
++ ++++++       cpufreq_for_each_entry(pos, clock_ratio) {
++ ++++++               f = pos->driver_data;
                        if (f > max_multiplier)
-- ------                       clock_ratio[i].frequency = CPUFREQ_ENTRY_INVALID;
++ ++++++                       pos->frequency = CPUFREQ_ENTRY_INVALID;
                        else
-- ------                       clock_ratio[i].frequency = busfreq * f;
++ ++++++                       pos->frequency = busfreq * f;
                }
         
                /* cpuinfo and default policy values */
         static int powernow_k6_cpu_exit(struct cpufreq_policy *policy)
         {
                unsigned int i;
 ---- ---       for (i = 0; i < 8; i++) {
 ---- ---               if (i == max_multiplier)
 ++++ +++
 ++++ +++       for (i = 0; (clock_ratio[i].frequency != CPUFREQ_TABLE_END); i++) {
 ++++ +++               if (clock_ratio[i].driver_data == max_multiplier) {
 ++++ +++                       struct cpufreq_freqs freqs;
 ++++ +++
 ++++ +++                       freqs.old = policy->cur;
 ++++ +++                       freqs.new = clock_ratio[i].frequency;
 ++++ +++                       freqs.flags = 0;
 ++++ +++
 ++++ +++                       cpufreq_freq_transition_begin(policy, &freqs);
                                powernow_k6_target(policy, i);
 ++++ +++                       cpufreq_freq_transition_end(policy, &freqs, 0);
 ++++ +++                       break;
 ++++ +++               }
                }
       -        cpufreq_frequency_table_put_attr(policy->cpu);
                return 0;
         }
         
diff --combined drivers/mfd/Kconfig
index 33834120d057117f5b98284227ee0e3ec59df371,33834120d057117f5b98284227ee0e3ec59df371,33834120d057117f5b98284227ee0e3ec59df371,33834120d057117f5b98284227ee0e3ec59df371,5bdefe72625e041a1bec0797fbfa1eb5722f1ae7,29be025d58355749f96f90fba21cf7933d9cbe80,33834120d057117f5b98284227ee0e3ec59df371,49bb445d846aa76e206dfe7fb7d30ad5f24b6b97,33834120d057117f5b98284227ee0e3ec59df371..e166d7176d7af34d56de4b4c28e9b635e0ad80c3
@@@@@@@@@@ -59,14 -59,14 -59,14 -59,14 -59,14 -59,14 -59,14 -59,6 -59,14 +59,14 @@@@@@@@@@ config MFD_AAT2870_COR
                  additional drivers must be enabled in order to use the
                  functionality of the device.
         
       + config MFD_BCM590XX
       +        tristate "Broadcom BCM590xx PMUs"
       +        select MFD_CORE
       +        select REGMAP_I2C
       +        depends on I2C
       +        help
       +          Support for the BCM590xx PMUs from Broadcom
       + 
         config MFD_CROS_EC
                tristate "ChromeOS Embedded Controller"
                select MFD_CORE
@@@@@@@@@@ -108,7 -108,7 -108,7 -108,7 -108,7 -108,7 -108,7 -100,7 -108,7 +108,7 @@@@@@@@@@ config PMIC_DA903
                bool "Dialog Semiconductor DA9030/DA9034 PMIC Support"
                depends on I2C=y
                help
       -          Say yes here to support for Dialog Semiconductor DA9030 (a.k.a
       +          Say yes here to add support for Dialog Semiconductor DA9030 (a.k.a
                  ARAVA) and DA9034 (a.k.a MICCO), these are Power Management IC
                  usually found on PXA processors-based platforms. This includes
                  the I2C driver and the core APIs _only_, you have to select
@@@@@@@@@@ -278,18 -278,18 -278,18 -278,18 -278,18 -278,18 -278,18 -270,13 -278,18 +278,18 @@@@@@@@@@ config MFD_KEMPL
                  device may provide functions like watchdog, GPIO, UART and I2C bus.
         
                  The following modules are supported:
       +                * COMe-bHL6
                        * COMe-bIP#
                        * COMe-bPC2 (ETXexpress-PC)
                        * COMe-bSC# (ETXexpress-SC T#)
       +                * COMe-cBT6
                        * COMe-cCT6
                        * COMe-cDC2 (microETXexpress-DC)
       +                * COMe-cHL6
                        * COMe-cPC2 (microETXexpress-PC)
       +                * COMe-mBT10
                        * COMe-mCT10
       +                * COMe-mTT10 (nanoETXexpress-TT)
                        * ETX-OH
         
                  This driver can also be built as a module. If so, the module
@@@@@@@@@@ -331,15 -331,15 -331,15 -331,15 -331,15 -331,15 -331,15 -318,14 -331,15 +331,15 @@@@@@@@@@ config MFD_88PM860
                  battery-charger under the corresponding menus.
         
         config MFD_MAX14577
---- ----       bool "Maxim Semiconductor MAX14577 MUIC + Charger Support"
++++ ++++       bool "Maxim Semiconductor MAX14577/77836 MUIC + Charger Support"
                depends on I2C=y
                select MFD_CORE
                select REGMAP_I2C
       +        select REGMAP_IRQ
                select IRQ_DOMAIN
                help
---- -- -         Say yes here to add support for Maxim Semiconductor MAX14577.
       -          Say yes here to support for Maxim Semiconductor MAX14577.
---- ----         This is a Micro-USB IC with Charger controls on chip.
++++ ++++         Say yes here to add support for Maxim Semiconductor MAX14577 and
++++ ++++         MAX77836 Micro-USB ICs with battery charger.
                  This driver provides common support for accessing the device;
                  additional drivers must be enabled in order to use the functionality
                  of the device.
@@@@@@@@@@ -351,7 -351,7 -351,7 -351,7 -351,7 -351,7 -351,7 -337,7 -351,7 +351,7 @@@@@@@@@@ config MFD_MAX7768
                select REGMAP_I2C
                select IRQ_DOMAIN
                help
       -          Say yes here to support for Maxim Semiconductor MAX77686.
       +          Say yes here to add support for Maxim Semiconductor MAX77686.
                  This is a Power Management IC with RTC on chip.
                  This driver provides common support for accessing the device;
                  additional drivers must be enabled in order to use the functionality
@@@@@@@@@@ -363,7 -363,7 -363,7 -363,7 -363,7 -363,7 -363,7 -349,7 -363,7 +363,7 @@@@@@@@@@ config MFD_MAX7769
                select MFD_CORE
                select REGMAP_I2C
                help
       -          Say yes here to support for Maxim Semiconductor MAX77693.
       +          Say yes here to add support for Maxim Semiconductor MAX77693.
                  This is a companion Power Management IC with Flash, Haptic, Charger,
                  and MUIC(Micro USB Interface Controller) controls on chip.
                  This driver provides common support for accessing the device;
@@@@@@@@@@ -377,7 -377,7 -377,7 -377,7 -377,7 -377,7 -377,7 -363,7 -377,7 +377,7 @@@@@@@@@@ config MFD_MAX890
                select REGMAP_I2C
                select REGMAP_IRQ
                help
       -          Say yes here to support for Maxim Semiconductor MAX8907. This is
       +          Say yes here to add support for Maxim Semiconductor MAX8907. This is
                  a Power Management IC. This driver provides common support for
                  accessing the device; additional drivers must be enabled in order
                  to use the functionality of the device.
@@@@@@@@@@ -387,7 -387,7 -387,7 -387,7 -387,7 -387,7 -387,7 -373,7 -387,7 +387,7 @@@@@@@@@@ config MFD_MAX892
                depends on I2C=y
                select MFD_CORE
                help
       -          Say yes here to support for Maxim Semiconductor MAX8925. This is
       +          Say yes here to add support for Maxim Semiconductor MAX8925. This is
                  a Power Management IC. This driver provides common support for
                  accessing the device, additional drivers must be enabled in order
                  to use the functionality of the device.
@@@@@@@@@@ -398,7 -398,7 -398,7 -398,7 -398,7 -398,7 -398,7 -384,7 -398,7 +398,7 @@@@@@@@@@ config MFD_MAX899
                select MFD_CORE
                select IRQ_DOMAIN
                help
       -          Say yes here to support for Maxim Semiconductor MAX8997/8966.
       +          Say yes here to add support for Maxim Semiconductor MAX8997/8966.
                  This is a Power Management IC with RTC, Flash, Fuel Gauge, Haptic,
                  MUIC controls on chip.
                  This driver provides common support for accessing the device;
@@@@@@@@@@ -411,7 -411,7 -411,7 -411,7 -411,7 -411,7 -411,7 -397,7 -411,7 +411,7 @@@@@@@@@@ config MFD_MAX899
                select MFD_CORE
                select IRQ_DOMAIN
                help
       -          Say yes here to support for Maxim Semiconductor MAX8998 and
       +          Say yes here to add support for Maxim Semiconductor MAX8998 and
                  National Semiconductor LP3974. This is a Power Management IC.
                  This driver provides common support for accessing the device,
                  additional drivers must be enabled in order to use the functionality
@@@@@@@@@@ -487,11 -487,11 -487,11 -487,11 -487,11 -487,11 -487,11 -473,10 -487,11 +487,11 @@@@@@@@@@ config MFD_PM8XX
         
         config MFD_PM8921_CORE
                tristate "Qualcomm PM8921 PMIC chip"
       -        depends on (ARCH_MSM || HEXAGON)
       -        depends on BROKEN
       +        depends on (ARM || HEXAGON)
       +        select IRQ_DOMAIN
                select MFD_CORE
                select MFD_PM8XXX
       +        select REGMAP
                help
                  If you say yes to this option, support will be included for the
                  built-in PM8921 PMIC chip.
                  Say M here if you want to include support for PM8921 chip as a module.
                  This will build a module called "pm8921-core".
         
       - config MFD_PM8XXX_IRQ
       -        bool "Qualcomm PM8xxx IRQ features"
       -        depends on MFD_PM8XXX
       -        default y if MFD_PM8XXX
       -        help
       -          This is the IRQ driver for Qualcomm PM 8xxx PMIC chips.
       - 
       -          This is required to use certain other PM 8xxx features, such as GPIO
       -          and MPP.
       - 
         config MFD_RDC321X
                tristate "RDC R-321x southbridge"
                select MFD_CORE
@@@@@@@@@@ -521,16 -521,16 -521,16 -521,16 -521,16 -521,16 -521,16 -516,6 -521,16 +521,16 @@@@@@@@@@ config MFD_RTSX_PC
                  types of memory cards, such as Memory Stick, Memory Stick Pro,
                  Secure Digital and MultiMediaCard.
         
       + config MFD_RTSX_USB
       +        tristate "Realtek USB card reader"
       +        depends on USB
       +        select MFD_CORE
       +        help
       +          Select this option to get support for Realtek USB 2.0 card readers
       +          including RTS5129, RTS5139, RTS5179 and RTS5170.
       +          Realtek card reader supports access to many types of memory cards,
       +          such as Memory Stick Pro, Secure Digital and MultiMediaCard.
       + 
         config MFD_RC5T583
                bool "Ricoh RC5T583 Power Management system device"
                depends on I2C=y
@@@@@@@@@@ -675,6 -675,6 -675,6 -675,6 -675,6 -675,7 -675,6 -660,6 -675,6 +675,7 @@@@@@@@@@ config MFD_DB8500_PRCM
         config MFD_STMPE
                bool "STMicroelectronics STMPE"
                depends on (I2C=y || SPI_MASTER=y)
+++++ +++       depends on OF
                select MFD_CORE
                help
                  Support for the STMPE family of I/O Expanders from
@@@@@@@@@@ -789,6 -789,6 -789,6 -789,6 -789,6 -790,6 -789,6 -774,17 -789,6 +790,6 @@@@@@@@@@ config MFD_PALMA
                  If you say yes here you get support for the Palmas
                  series of PMIC chips from Texas Instruments.
         
       - config MFD_TI_SSP
       -        tristate "TI Sequencer Serial Port support"
       -        depends on ARCH_DAVINCI_TNETV107X
       -        select MFD_CORE
       -        ---help---
       -          Say Y here if you want support for the Sequencer Serial Port
       -          in a Texas Instruments TNETV107X SoC.
       - 
       -          To compile this driver as a module, choose M here: the
       -          module will be called ti-ssp.
       - 
         config TPS6105X
                tristate "TI TPS61050/61052 Boost Converters"
                depends on I2C
@@@@@@@@@@ -857,22 -857,22 -857,22 -857,22 -857,22 -858,22 -857,22 -853,6 -857,22 +858,22 @@@@@@@@@@ config MFD_TPS6521
                  This driver can also be built as a module.  If so, the module
                  will be called tps65217.
         
       + config MFD_TPS65218
       +        tristate "TI TPS65218 Power Management chips"
       +        depends on I2C
       +        select MFD_CORE
       +        select REGMAP_I2C
       +        select REGMAP_IRQ
       +        help
       +          If you say yes here you get support for the TPS65218 series of
       +          Power Management chips.
       +          These include voltage regulators, gpio and other features
       +          that are often used in portable devices. Only regulator
       +          component is currently supported.
       + 
       +          This driver can also be built as a module.  If so, the module
       +          will be called tps65218.
       + 
         config MFD_TPS6586X
                bool "TI TPS6586x Power Management chips"
                depends on I2C=y
@@@@@@@@@@ -955,6 -955,6 -955,6 -955,6 -955,6 -956,6 -955,6 -935,16 -955,6 +956,6 @@@@@@@@@@ config TWL4030_COR
                  high speed USB OTG transceiver, an audio codec (on most
                  versions) and many other features.
         
       - config TWL4030_MADC
       -        tristate "TI TWL4030 MADC"
       -        depends on TWL4030_CORE
       -        help
       -        This driver provides support for triton TWL4030-MADC. The
       -        driver supports both RT and SW conversion methods.
       - 
       -        This driver can be built as a module. If so it will be
       -        named twl4030-madc
       - 
         config TWL4030_POWER
                bool "TI TWL4030 power resources"
                depends on TWL4030_CORE && ARM
@@@@@@@@@@ -1203,6 -1203,6 -1203,6 -1203,6 -1203,6 -1204,6 -1203,6 -1193,9 -1203,6 +1204,6 @@@@@@@@@@ config MFD_STW481
                  in various ST Microelectronics and ST-Ericsson embedded
                  Nomadik series.
         
       - endmenu
       - endif
       - 
         menu "Multimedia Capabilities Port drivers"
                depends on ARCH_SA1100
         
@@@@@@@@@@ -1233,6 -1233,6 -1233,6 -1233,6 -1233,6 -1234,6 -1233,6 -1226,3 -1233,6 +1234,6 @@@@@@@@@@ config VEXPRESS_CONFI
                help
                  Platform configuration infrastructure for the ARM Ltd.
                  Versatile Express.
       + 
       + endmenu
       + endif
diff --combined drivers/mfd/twl-core.c
index e87140bef667212af51bb6e02fd0ee06744190dc,e87140bef667212af51bb6e02fd0ee06744190dc,e87140bef667212af51bb6e02fd0ee06744190dc,e87140bef667212af51bb6e02fd0ee06744190dc,e87140bef667212af51bb6e02fd0ee06744190dc,e87140bef667212af51bb6e02fd0ee06744190dc,e87140bef667212af51bb6e02fd0ee06744190dc,ad7d04f95dd10c50a2f40354d8b802803def0860,e87140bef667212af51bb6e02fd0ee06744190dc..db11b4f406116124ca86d82b1cec6d2e358c99c2
         #define TWL4030_BASEADD_BACKUP         0x0014
         #define TWL4030_BASEADD_INT            0x002E
         #define TWL4030_BASEADD_PM_MASTER      0x0036
+++++++ +
         #define TWL4030_BASEADD_PM_RECEIVER    0x005B
+++++++ +#define TWL4030_DCDC_GLOBAL_CFG                0x06
+++++++ +#define SMARTREFLEX_ENABLE             BIT(3)
+++++++ +
         #define TWL4030_BASEADD_RTC            0x001C
         #define TWL4030_BASEADD_SECURED_REG    0x0000
         
@@@@@@@@@@ -282,11 -282,11 -282,11 -282,11 -282,11 -282,11 -282,11 -286,11 -282,11 +286,11 @@@@@@@@@@ static struct reg_default twl4030_49_de
         static bool twl4030_49_nop_reg(struct device *dev, unsigned int reg)
         {
                switch (reg) {
       -        case 0:
       -        case 3:
       -        case 40:
       -        case 41:
       -        case 42:
       +        case 0x00:
       +        case 0x03:
       +        case 0x40:
       +        case 0x41:
       +        case 0x42:
                        return false;
                default:
                        return true;
@@@@@@@@@@ -1204,6 -1204,6 -1204,6 -1204,6 -1204,6 -1204,6 -1204,6 -1208,11 -1204,6 +1208,11 @@@@@@@@@@ twl_probe(struct i2c_client *client, co
                 * Disable TWL4030/TWL5030 I2C Pull-up on I2C1 and I2C4(SR) interface.
                 * Program I2C_SCL_CTRL_PU(bit 0)=0, I2C_SDA_CTRL_PU (bit 2)=0,
                 * SR_I2C_SCL_CTRL_PU(bit 4)=0 and SR_I2C_SDA_CTRL_PU(bit 6)=0.
+++++++ +        *
+++++++ +        * Also, always enable SmartReflex bit as that's needed for omaps to
+++++++ +        * to do anything over I2C4 for voltage scaling even if SmartReflex
+++++++ +        * is disabled. Without the SmartReflex bit omap sys_clkreq idle
+++++++ +        * signal will never trigger for retention idle.
                 */
                if (twl_class_is_4030()) {
                        u8 temp;
                        temp &= ~(SR_I2C_SDA_CTRL_PU | SR_I2C_SCL_CTRL_PU | \
                                I2C_SDA_CTRL_PU | I2C_SCL_CTRL_PU);
                        twl_i2c_write_u8(TWL4030_MODULE_INTBR, temp, REG_GPPUPDCTR1);
+++++++ +
+++++++ +               twl_i2c_read_u8(TWL_MODULE_PM_RECEIVER, &temp,
+++++++ +                               TWL4030_DCDC_GLOBAL_CFG);
+++++++ +               temp |= SMARTREFLEX_ENABLE;
+++++++ +               twl_i2c_write_u8(TWL_MODULE_PM_RECEIVER, temp,
+++++++ +                                TWL4030_DCDC_GLOBAL_CFG);
                }
         
                if (node) {