David Hendricks (dhend...@chromium.org) just uploaded a new patch set to 
gerrit, which you can find at http://review.coreboot.org/2124

-gerrit

commit eaffaa6cda62b9b03f4ac5f4a2b4e2998dacec2f
Author: David Hendricks <dhend...@chromium.org>
Date:   Wed Jan 9 16:26:26 2013 -0800

    size optimizations for max77686
    
    This contains some size optimizations for the Maxim MAX77686 driver:
    - change max77686_para.vol_{min,div} from u32 to u16 (currently their
      max value is 50000 so it should be fine)
    - remove max77686_para.regnum which takes 4 bytes for each and is not
      used
    
    (Patch was originally written by Hung-Te Lin, I'm just uploading it)
    
    Change-Id: I24044427c49467e99380d1f60ebc59e69c285b22
    Signed-off-by: Hung-Te Lin <hun...@chromium.org>
    Signed-off-by: David Hendricks <dhend...@chromium.org>
---
 src/drivers/maxim/max77686/max77686.c | 88 ++++++++++++++++++-----------------
 src/drivers/maxim/max77686/max77686.h |  5 +-
 2 files changed, 47 insertions(+), 46 deletions(-)

diff --git a/src/drivers/maxim/max77686/max77686.c 
b/src/drivers/maxim/max77686/max77686.c
index 8fbcb8f..16fa7f5 100644
--- a/src/drivers/maxim/max77686/max77686.c
+++ b/src/drivers/maxim/max77686/max77686.c
@@ -21,9 +21,12 @@
  * MA 02111-1307 USA
  */
 
+#include <arch/io.h>
 #include <common.h>
-#include <smbus.h>
-#include <max77686.h>
+//#include <smbus.h>
+#include <device/i2c.h>
+
+#include "max77686.h"
 
 /* Chip register numbers (not exported from this module) */
 enum {
@@ -39,45 +42,45 @@ enum {
  * Max77686 parameters values
  * see max77686.h for parameters details
  */
-struct max77686_para max77686_param[] = {/*{regnum, vol_addr, vol_bitpos,
+struct max77686_para max77686_param[] = {/*{vol_addr, vol_bitpos,
        vol_bitmask, reg_enaddr, reg_enbitpos, reg_enbitmask, reg_enbiton,
        reg_enbitoff, vol_min, vol_div}*/
-       {PMIC_BUCK1, 0x11, 0x0, 0x3F, 0x10, 0x0, 0x3, 0x3, 0x0, 750, 50000},
-       {PMIC_BUCK2, 0x14, 0x0, 0xFF, 0x12, 0x4, 0x3, 0x1, 0x0, 600, 12500},
-       {PMIC_BUCK3, 0x1E, 0x0, 0xFF, 0x1C, 0x4, 0x3, 0x1, 0x0, 600, 12500},
-       {PMIC_BUCK4, 0x28, 0x0, 0xFF, 0x26, 0x4, 0x3, 0x1, 0x0, 600, 12500},
-       {PMIC_BUCK5, 0x31, 0x0, 0x3F, 0x30, 0x0, 0x3, 0x3, 0x0, 750, 50000},
-       {PMIC_BUCK6, 0x33, 0x0, 0x3F, 0x32, 0x0, 0x3, 0x3, 0x0, 750, 50000},
-       {PMIC_BUCK7, 0x35, 0x0, 0x3F, 0x34, 0x0, 0x3, 0x3, 0x0, 750, 50000},
-       {PMIC_BUCK8, 0x37, 0x0, 0x3F, 0x36, 0x0, 0x3, 0x3, 0x0, 750, 50000},
-       {PMIC_BUCK9, 0x39, 0x0, 0x3F, 0x38, 0x0, 0x3, 0x3, 0x0, 750, 50000},
-       {PMIC_LDO1,  0x40, 0x0, 0x3F, 0x40, 0x6, 0x3, 0x3, 0x0, 800, 25000},
-       {PMIC_LDO2,  0x41, 0x0, 0x3F, 0x41, 0x6, 0x3, 0x1, 0x0, 800, 25000},
-       {PMIC_LDO3,  0x42, 0x0, 0x3F, 0x42, 0x6, 0x3, 0x3, 0x0, 800, 50000},
-       {PMIC_LDO4,  0x43, 0x0, 0x3F, 0x43, 0x6, 0x3, 0x3, 0x0, 800, 50000},
-       {PMIC_LDO5,  0x44, 0x0, 0x3F, 0x44, 0x6, 0x3, 0x3, 0x0, 800, 50000},
-       {PMIC_LDO6,  0x45, 0x0, 0x3F, 0x45, 0x6, 0x3, 0x1, 0x0, 800, 25000},
-       {PMIC_LDO7,  0x46, 0x0, 0x3F, 0x46, 0x6, 0x3, 0x1, 0x0, 800, 25000},
-       {PMIC_LDO8,  0x47, 0x0, 0x3F, 0x47, 0x6, 0x3, 0x1, 0x0, 800, 25000},
-       {PMIC_LDO9,  0x48, 0x0, 0x3F, 0x48, 0x6, 0x3, 0x3, 0x0, 800, 50000},
-       {PMIC_LDO10, 0x49, 0x0, 0x3F, 0x49, 0x6, 0x3, 0x1, 0x0, 800, 50000},
-       {PMIC_LDO11, 0x4A, 0x0, 0x3F, 0x4A, 0x6, 0x3, 0x1, 0x0, 800, 50000},
-       {PMIC_LDO12, 0x4B, 0x0, 0x3F, 0x4B, 0x6, 0x3, 0x1, 0x0, 800, 50000},
-       {PMIC_LDO13, 0x4C, 0x0, 0x3F, 0x4C, 0x6, 0x3, 0x3, 0x0, 800, 50000},
-       {PMIC_LDO14, 0x4D, 0x0, 0x3F, 0x4D, 0x6, 0x3, 0x1, 0x0, 800, 50000},
-       {PMIC_LDO15, 0x4E, 0x0, 0x3F, 0x4E, 0x6, 0x3, 0x1, 0x0, 800, 25000},
-       {PMIC_LDO16, 0x4F, 0x0, 0x3F, 0x4F, 0x6, 0x3, 0x1, 0x0, 800, 50000},
-       {PMIC_LDO17, 0x50, 0x0, 0x3F, 0x50, 0x6, 0x3, 0x3, 0x0, 800, 50000},
-       {PMIC_LDO18, 0x51, 0x0, 0x3F, 0x51, 0x6, 0x3, 0x3, 0x0, 800, 50000},
-       {PMIC_LDO19, 0x52, 0x0, 0x3F, 0x52, 0x6, 0x3, 0x3, 0x0, 800, 50000},
-       {PMIC_LDO20, 0x53, 0x0, 0x3F, 0x53, 0x6, 0x3, 0x3, 0x0, 800, 50000},
-       {PMIC_LDO21, 0x54, 0x0, 0x3F, 0x54, 0x6, 0x3, 0x3, 0x0, 800, 50000},
-       {PMIC_LDO22, 0x55, 0x0, 0x3F, 0x55, 0x6, 0x3, 0x3, 0x0, 800, 50000},
-       {PMIC_LDO23, 0x56, 0x0, 0x3F, 0x56, 0x6, 0x3, 0x3, 0x0, 800, 50000},
-       {PMIC_LDO24, 0x57, 0x0, 0x3F, 0x57, 0x6, 0x3, 0x3, 0x0, 800, 50000},
-       {PMIC_LDO25, 0x58, 0x0, 0x3F, 0x58, 0x6, 0x3, 0x3, 0x0, 800, 50000},
-       {PMIC_LDO26, 0x59, 0x0, 0x3F, 0x59, 0x6, 0x3, 0x3, 0x0, 800, 50000},
-       {PMIC_EN32KHZ_CP, 0x0, 0x0, 0x0, 0x7F, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0},
+       {/* PMIC_BUCK1 */ 0x11, 0x0, 0x3F, 0x10, 0x0, 0x3, 0x3, 0x0, 750, 
50000},
+       {/* PMIC_BUCK2 */ 0x14, 0x0, 0xFF, 0x12, 0x4, 0x3, 0x1, 0x0, 600, 
12500},
+       {/* PMIC_BUCK3 */ 0x1E, 0x0, 0xFF, 0x1C, 0x4, 0x3, 0x1, 0x0, 600, 
12500},
+       {/* PMIC_BUCK4 */ 0x28, 0x0, 0xFF, 0x26, 0x4, 0x3, 0x1, 0x0, 600, 
12500},
+       {/* PMIC_BUCK5 */ 0x31, 0x0, 0x3F, 0x30, 0x0, 0x3, 0x3, 0x0, 750, 
50000},
+       {/* PMIC_BUCK6 */ 0x33, 0x0, 0x3F, 0x32, 0x0, 0x3, 0x3, 0x0, 750, 
50000},
+       {/* PMIC_BUCK7 */ 0x35, 0x0, 0x3F, 0x34, 0x0, 0x3, 0x3, 0x0, 750, 
50000},
+       {/* PMIC_BUCK8 */ 0x37, 0x0, 0x3F, 0x36, 0x0, 0x3, 0x3, 0x0, 750, 
50000},
+       {/* PMIC_BUCK9 */ 0x39, 0x0, 0x3F, 0x38, 0x0, 0x3, 0x3, 0x0, 750, 
50000},
+       {/* PMIC_LDO1 */  0x40, 0x0, 0x3F, 0x40, 0x6, 0x3, 0x3, 0x0, 800, 
25000},
+       {/* PMIC_LDO2 */  0x41, 0x0, 0x3F, 0x41, 0x6, 0x3, 0x1, 0x0, 800, 
25000},
+       {/* PMIC_LDO3 */  0x42, 0x0, 0x3F, 0x42, 0x6, 0x3, 0x3, 0x0, 800, 
50000},
+       {/* PMIC_LDO4 */  0x43, 0x0, 0x3F, 0x43, 0x6, 0x3, 0x3, 0x0, 800, 
50000},
+       {/* PMIC_LDO5 */  0x44, 0x0, 0x3F, 0x44, 0x6, 0x3, 0x3, 0x0, 800, 
50000},
+       {/* PMIC_LDO6 */  0x45, 0x0, 0x3F, 0x45, 0x6, 0x3, 0x1, 0x0, 800, 
25000},
+       {/* PMIC_LDO7 */  0x46, 0x0, 0x3F, 0x46, 0x6, 0x3, 0x1, 0x0, 800, 
25000},
+       {/* PMIC_LDO8 */  0x47, 0x0, 0x3F, 0x47, 0x6, 0x3, 0x1, 0x0, 800, 
25000},
+       {/* PMIC_LDO9 */  0x48, 0x0, 0x3F, 0x48, 0x6, 0x3, 0x3, 0x0, 800, 
50000},
+       {/* PMIC_LDO10 */ 0x49, 0x0, 0x3F, 0x49, 0x6, 0x3, 0x1, 0x0, 800, 
50000},
+       {/* PMIC_LDO11 */ 0x4A, 0x0, 0x3F, 0x4A, 0x6, 0x3, 0x1, 0x0, 800, 
50000},
+       {/* PMIC_LDO12 */ 0x4B, 0x0, 0x3F, 0x4B, 0x6, 0x3, 0x1, 0x0, 800, 
50000},
+       {/* PMIC_LDO13 */ 0x4C, 0x0, 0x3F, 0x4C, 0x6, 0x3, 0x3, 0x0, 800, 
50000},
+       {/* PMIC_LDO14 */ 0x4D, 0x0, 0x3F, 0x4D, 0x6, 0x3, 0x1, 0x0, 800, 
50000},
+       {/* PMIC_LDO15 */ 0x4E, 0x0, 0x3F, 0x4E, 0x6, 0x3, 0x1, 0x0, 800, 
25000},
+       {/* PMIC_LDO16 */ 0x4F, 0x0, 0x3F, 0x4F, 0x6, 0x3, 0x1, 0x0, 800, 
50000},
+       {/* PMIC_LDO17 */ 0x50, 0x0, 0x3F, 0x50, 0x6, 0x3, 0x3, 0x0, 800, 
50000},
+       {/* PMIC_LDO18 */ 0x51, 0x0, 0x3F, 0x51, 0x6, 0x3, 0x3, 0x0, 800, 
50000},
+       {/* PMIC_LDO19 */ 0x52, 0x0, 0x3F, 0x52, 0x6, 0x3, 0x3, 0x0, 800, 
50000},
+       {/* PMIC_LDO20 */ 0x53, 0x0, 0x3F, 0x53, 0x6, 0x3, 0x3, 0x0, 800, 
50000},
+       {/* PMIC_LDO21 */ 0x54, 0x0, 0x3F, 0x54, 0x6, 0x3, 0x3, 0x0, 800, 
50000},
+       {/* PMIC_LDO22 */ 0x55, 0x0, 0x3F, 0x55, 0x6, 0x3, 0x3, 0x0, 800, 
50000},
+       {/* PMIC_LDO23 */ 0x56, 0x0, 0x3F, 0x56, 0x6, 0x3, 0x3, 0x0, 800, 
50000},
+       {/* PMIC_LDO24 */ 0x57, 0x0, 0x3F, 0x57, 0x6, 0x3, 0x3, 0x0, 800, 
50000},
+       {/* PMIC_LDO25 */ 0x58, 0x0, 0x3F, 0x58, 0x6, 0x3, 0x3, 0x0, 800, 
50000},
+       {/* PMIC_LDO26 */ 0x59, 0x0, 0x3F, 0x59, 0x6, 0x3, 0x3, 0x0, 800, 
50000},
+       {/* PMIC_EN32KHZ_CP */ 0x0, 0x0, 0x0, 0x7F, 0x1, 0x1, 0x1, 0x0, 0x0, 
0x0},
 };
 
 /*
@@ -174,15 +177,15 @@ static int max77686_do_volsetting(enum max77686_regnum 
reg, unsigned int volt,
        }
 
        if (volt_units == MAX77686_UV)
-               vol_level = volt - pmic->vol_min * 1000;
+               vol_level = volt - (u32)pmic->vol_min * 1000;
        else
-               vol_level = (volt - pmic->vol_min) * 1000;
+               vol_level = (volt - (u32)pmic->vol_min) * 1000;
 
        if (vol_level < 0) {
                debug("Not a valid voltage level to set\n");
                return -1;
        }
-       vol_level /= pmic->vol_div;
+       vol_level /= (u32)pmic->vol_div;
 
        clrsetbits_8(&read_data, pmic->vol_bitmask << pmic->vol_bitpos,
                        vol_level << pmic->vol_bitpos);
@@ -198,7 +201,6 @@ static int max77686_do_volsetting(enum max77686_regnum reg, 
unsigned int volt,
                debug("Failed to enable buck/ldo.\n");
                return -1;
        }
-
        return 0;
 }
 
diff --git a/src/drivers/maxim/max77686/max77686.h 
b/src/drivers/maxim/max77686/max77686.h
index 345471e..ee53e27 100644
--- a/src/drivers/maxim/max77686/max77686.h
+++ b/src/drivers/maxim/max77686/max77686.h
@@ -77,7 +77,6 @@ enum max77686_regnum {
  * @param vol_div      voltage division value of given buck/ldo
  */
 struct max77686_para {
-       enum max77686_regnum regnum;
        u8      vol_addr;
        u8      vol_bitpos;
        u8      vol_bitmask;
@@ -86,8 +85,8 @@ struct max77686_para {
        u8      reg_enbitmask;
        u8      reg_enbiton;
        u8      reg_enbitoff;
-       u32     vol_min;
-       u32     vol_div;
+       u16     vol_min;
+       u16     vol_div;
 };
 
 /* I2C device address for pmic max77686 */

-- 
coreboot mailing list: coreboot@coreboot.org
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to