]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
Merge branch 'master' of git://git.denx.de/u-boot-video
authorTom Rini <trini@ti.com>
Mon, 19 Nov 2012 16:28:04 +0000 (09:28 -0700)
committerTom Rini <trini@ti.com>
Mon, 19 Nov 2012 16:28:04 +0000 (09:28 -0700)
86 files changed:
MAKEALL
Makefile
arch/arm/lib/board.c
arch/microblaze/cpu/cache.c
arch/microblaze/cpu/start.S
arch/microblaze/cpu/u-boot.lds
arch/microblaze/include/asm/bitops.h
arch/microblaze/include/asm/byteorder.h
arch/microblaze/include/asm/posix_types.h
arch/microblaze/lib/bootm.c
board/BuS/eb_cpu5282/Makefile
board/BuS/eb_cpu5282/cfm_flash.c [deleted file]
board/BuS/eb_cpu5282/cfm_flash.h [deleted file]
board/BuS/eb_cpu5282/eb_cpu5282.c
board/BuS/eb_cpu5282/flash.c [deleted file]
board/davedenx/qong/qong.c
board/freescale/mx31pdk/mx31pdk.c
board/freescale/mx35pdk/mx35pdk.c
board/freescale/mx51evk/mx51evk.c
board/freescale/mx53evk/mx53evk.c
board/freescale/mx53loco/mx53loco.c
board/genesi/mx51_efikamx/efikamx.c
board/hale/tt01/tt01.c
board/samsung/goni/goni.c
board/samsung/trats/trats.c
board/samsung/universal_c210/universal.c
board/ttcontrol/vision2/vision2.c
boards.cfg
common/cmd_mmc.c
common/command.c
drivers/misc/Makefile
drivers/misc/pmic_core.c [deleted file]
drivers/power/Makefile
drivers/power/battery/Makefile [moved from board/BuS/eb_cpu5282/config.mk with 52% similarity]
drivers/power/battery/bat_trats.c [new file with mode: 0644]
drivers/power/fuel_gauge/Makefile [new file with mode: 0644]
drivers/power/fuel_gauge/fg_max17042.c [new file with mode: 0644]
drivers/power/pmic/Makefile [new file with mode: 0644]
drivers/power/pmic/muic_max8997.c [new file with mode: 0644]
drivers/power/pmic/pmic_max8997.c [new file with mode: 0644]
drivers/power/pmic/pmic_max8998.c [moved from drivers/misc/pmic_max8998.c with 82% similarity]
drivers/power/power_core.c [new file with mode: 0644]
drivers/power/power_dialog.c [moved from drivers/misc/pmic_dialog.c with 81% similarity]
drivers/power/power_fsl.c [moved from drivers/misc/pmic_fsl.c with 81% similarity]
drivers/power/power_i2c.c [moved from drivers/misc/pmic_i2c.c with 62% similarity]
drivers/power/power_spi.c [moved from drivers/misc/pmic_spi.c with 97% similarity]
drivers/rtc/mc13xxx-rtc.c
fs/fs.c
fs/zfs/zfs.c
include/configs/PK1C20.h
include/configs/eb_cpu5282.h
include/configs/imx31_litekit.h
include/configs/microblaze-generic.h
include/configs/mx31ads.h
include/configs/mx31pdk.h
include/configs/mx35pdk.h
include/configs/mx51_efikamx.h
include/configs/mx51evk.h
include/configs/mx53evk.h
include/configs/mx53loco.h
include/configs/nios2-generic.h
include/configs/qong.h
include/configs/s5p_goni.h
include/configs/s5pc210_universal.h
include/configs/trats.h
include/configs/tt01.h
include/configs/vision2.h
include/nios2.h
include/power/battery.h [moved from drivers/misc/pmic_max8997.c with 71% similarity]
include/power/fg_battery_cell_params.h [new file with mode: 0644]
include/power/max17042_fg.h [new file with mode: 0644]
include/power/max8997_muic.h [new file with mode: 0644]
include/power/max8997_pmic.h [moved from include/max8997_pmic.h with 88% similarity]
include/power/max8998_pmic.h [moved from include/max8998_pmic.h with 100% similarity]
include/power/pmic.h [moved from include/pmic.h with 58% similarity]
include/power/power_chrg.h [moved from arch/nios2/include/asm/status_led.h with 63% similarity]
include/status_led.h
nand_spl/board/freescale/mpc8536ds/Makefile
nand_spl/board/freescale/mpc8569mds/Makefile
nand_spl/board/freescale/mpc8572ds/Makefile
nand_spl/board/freescale/mx31pdk/Makefile
nand_spl/board/freescale/p1010rdb/Makefile
nand_spl/board/freescale/p1023rds/Makefile
nand_spl/board/freescale/p1_p2_rdb/Makefile
nand_spl/board/karo/tx25/Makefile
tools/patman/series.py

diff --git a/MAKEALL b/MAKEALL
index 84a5c92cf39308ddef93ab17908b84811c4971d3..46c021241ff4809bdb8e033d90e28b510e0e5d64 100755 (executable)
--- a/MAKEALL
+++ b/MAKEALL
@@ -380,6 +380,12 @@ LIST_pxa="$(boards_by_cpu pxa)"
 
 LIST_ixp="$(boards_by_cpu ixp)"
 
+#########################################################################
+## SPEAr Systems
+#########################################################################
+
+LIST_spear="$(boards_by_soc spear)"
+
 #########################################################################
 ## ARM groups
 #########################################################################
index 9dc89f938c56954dda780ed675160501a23fa6c0..1a17be9dbe27ee7f9a31156cdd3a4b41cae83697 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -293,7 +293,10 @@ LIBS-y += drivers/net/libnet.o
 LIBS-y += drivers/net/phy/libphy.o
 LIBS-y += drivers/pci/libpci.o
 LIBS-y += drivers/pcmcia/libpcmcia.o
-LIBS-y += drivers/power/libpower.o
+LIBS-y += drivers/power/libpower.o \
+       drivers/power/fuel_gauge/libfuel_gauge.o \
+       drivers/power/pmic/libpmic.o \
+       drivers/power/battery/libbattery.o
 LIBS-y += drivers/spi/libspi.o
 LIBS-y += drivers/dfu/libdfu.o
 ifeq ($(CPU),mpc83xx)
@@ -811,7 +814,7 @@ clean:
        @rm -f $(obj)include/generated/asm-offsets.h
        @rm -f $(obj)$(CPUDIR)/$(SOC)/asm-offsets.s
        @rm -f $(TIMESTAMP_FILE) $(VERSION_FILE)
-       @$(MAKE) -C doc/DocBook/ cleandocs
+       @$(MAKE) -s -C doc/DocBook/ cleandocs
        @find $(OBJTREE) -type f \
                \( -name 'core' -o -name '*.bak' -o -name '*~' -o -name '*.su' \
                -o -name '*.o'  -o -name '*.a' -o -name '*.exe' \) -print \
index 92cad9a6eb1a8c2f0b71ad7d6c19bb61780fc383..22a4d9cc0e59d4c877fb8892e2f960b0cad32843 100644 (file)
@@ -224,6 +224,13 @@ int __arch_cpu_init(void)
 int arch_cpu_init(void)
        __attribute__((weak, alias("__arch_cpu_init")));
 
+int __power_init_board(void)
+{
+       return 0;
+}
+int power_init_board(void)
+       __attribute__((weak, alias("__power_init_board")));
+
 init_fnc_t *init_sequence[] = {
        arch_cpu_init,          /* basic arch cpu dependent setup */
 
@@ -525,6 +532,7 @@ void board_init_r(gd_t *id, ulong dest_addr)
 #ifdef CONFIG_ARCH_EARLY_INIT_R
        arch_early_init_r();
 #endif
+       power_init_board();
 
 #if !defined(CONFIG_SYS_NO_FLASH)
        puts("Flash: ");
index d258a6938228e499c508845d3a985e0ed6e2f99e..ce066b96e99321fe62567cdf59ecde53e09937a5 100644 (file)
@@ -61,12 +61,7 @@ void dcache_enable (void) {
 
 void   dcache_disable(void) {
 #ifdef XILINX_USE_DCACHE
-#ifdef XILINX_DCACHE_BYTE_SIZE
        flush_cache(0, XILINX_DCACHE_BYTE_SIZE);
-#else
-#warning please rebuild BSPs and update configuration
-       flush_cache(0, 32768);
-#endif
 #endif
        MSRCLR(0x80);
 }
index 8564c4e30ab5e70c6d1008c1cfcd3c8f14dfca9a..3da711d4d500449866d2464e96f0edf9d1baf45f 100644 (file)
@@ -132,6 +132,12 @@ _start:
        rsubi   r8, r10, 0x26
        sh      r6, r0, r8
 
+       /* Flush cache before enable cache */
+       addik   r5, r0, 0
+       addik   r6, r0, XILINX_DCACHE_BYTE_SIZE
+flush: bralid r15, flush_cache
+       nop
+
        /* enable instruction and data cache */
        mfs     r12, rmsr
        ori     r12, r12, 0xa0
index 4297b9344313af12b181ae084a109e88dc8afe8c..fe3d97dad88218bcad7811cfc420dbb6ffe56067 100644 (file)
@@ -45,7 +45,9 @@ SECTIONS
        .data ALIGN(0x4):
        {
                __data_start = .;
+#ifdef CONFIG_OF_EMBED
                dts/libdts.o (.data)
+#endif
                *(.data)
                __data_end = .;
        }
index e8c835f7c071246ddc707fd5f934e1d43fb80038..eafa2b576bcf6a24fb010d12f5f53bbbfd7114ae 100644 (file)
@@ -319,7 +319,8 @@ extern __inline__ int ext2_test_bit(int nr, const volatile void * addr)
 #define ext2_find_first_zero_bit(addr, size) \
        ext2_find_next_zero_bit((addr), (size), 0)
 
-extern __inline__ unsigned long ext2_find_next_zero_bit(void *addr, unsigned long size, unsigned long offset)
+static inline unsigned long ext2_find_next_zero_bit(void *addr,
+                               unsigned long size, unsigned long offset)
 {
        unsigned long *p = ((unsigned long *) addr) + (offset >> 5);
        unsigned long result = offset & ~31UL;
index b2757a41f8a43205d33abe10d7d3db7ad36ccf96..f3a471d1b2be308f69b86c8576be98d3feda359c 100644 (file)
 
 #ifdef __GNUC__
 
-/* This is effectively a dupe of the arch-independent byteswap
-   code in include/linux/byteorder/swab.h, however we force a cast
-   of the result up to 32 bits.  This in turn forces the compiler
-   to explicitly clear the high 16 bits, which it wasn't doing otherwise.
-
-   I think this is a symptom of a bug in mb-gcc.  JW 20040303
-*/
-
-
-static __inline__ __u16 ___arch__swab16 (__u16 half_word)
-{
-       /* 32 bit temp to cast result, forcing clearing of high word */
-       __u32 temp;
-
-       temp = ((half_word & 0x00FFU) << 8) | ((half_word & 0xFF00U) >> 8);
-
-       return (__u16) temp;
-}
-
-#define __arch__swab16(x) ___arch__swab16(x)
-
-/* Microblaze has no arch-specific endian conversion insns */
-
 #if !defined(__STRICT_ANSI__) || defined(__KERNEL__)
 #  define __BYTEORDER_HAS_U64__
 #  define __SWAB_64_THRU_32__
index 9a2cc663ec03e6633c65c7aa6b7dc25c7cd096e9..38dc5aa85db5104a38323987b0fc56bb818ada8d 100644 (file)
@@ -16,9 +16,6 @@
 #ifndef __MICROBLAZE_POSIX_TYPES_H__
 #define __MICROBLAZE_POSIX_TYPES_H__
 
-#include <asm/bitops.h>
-
-
 typedef unsigned int   __kernel_dev_t;
 typedef unsigned long  __kernel_ino_t;
 typedef unsigned long long __kernel_ino64_t;
index 95cee509d257857267b0b2ca8cd211b05f3061ff..66d21f4ef66fe8afb2d9d2a314cbe7b71fbcdb93 100644 (file)
@@ -70,12 +70,7 @@ int do_bootm_linux(int flag, int argc, char * const argv[], bootm_headers_t *ima
 #endif
 
 #ifdef XILINX_USE_DCACHE
-#ifdef XILINX_DCACHE_BYTE_SIZE
        flush_cache(0, XILINX_DCACHE_BYTE_SIZE);
-#else
-#warning please rebuild BSPs and update configuration
-       flush_cache(0, 32768);
-#endif
 #endif
        /*
         * Linux Kernel Parameters (passing device tree):
index 0f14699c5e527186e5c354660132fd240b6dad63..ac860c1348f6ba2e8d6ce881e99d95599b203ef9 100644 (file)
@@ -25,7 +25,7 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).o
 
-COBJS  = $(BOARD).o cfm_flash.o flash.o
+COBJS  = $(BOARD).o
 
 SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
diff --git a/board/BuS/eb_cpu5282/cfm_flash.c b/board/BuS/eb_cpu5282/cfm_flash.c
deleted file mode 100644 (file)
index fe03b17..0000000
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * Basic Flash Driver for Freescale MCF 5281/5282 internal FLASH
- *
- * (C) Copyright 2005 BuS Elektronik GmbH & Co.KG <esw@bus-elektonik.de>
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include <common.h>
-#include <asm/m5282.h>
-#include  "cfm_flash.h"
-
-#if defined(CONFIG_M5281) || defined(CONFIG_M5282)
-
-#if (CONFIG_SYS_CLK>20000000)
-       #define CFM_CLK  (((long) CONFIG_SYS_CLK / (400000 * 8) + 1) | 0x40)
-#else
-       #define CFM_CLK  ((long) CONFIG_SYS_CLK / 400000 + 1)
-#endif
-
-#define cmf_backdoor_address(addr)     (((addr) & 0x0007FFFF) | 0x04000000 | \
-                                        (CONFIG_SYS_MBAR & 0xC0000000))
-
-void cfm_flash_print_info (flash_info_t * info)
-{
-       printf ("Freescale: ");
-       switch (info->flash_id & FLASH_TYPEMASK) {
-       case FREESCALE_ID_MCF5281 & FLASH_TYPEMASK:
-               printf ("MCF5281 internal FLASH\n");
-               break;
-       case FREESCALE_ID_MCF5282 & FLASH_TYPEMASK:
-               printf ("MCF5282 internal FLASH\n");
-               break;
-       default:
-               printf ("Unknown Chip Type\n");
-               break;
-       }
-}
-
-void cfm_flash_init (flash_info_t * info)
-{
-       int sector;
-       ulong protection;
-       MCFCFM_MCR = 0;
-       MCFCFM_CLKD = CFM_CLK;
-       debug ("CFM Clock divider: %ld (%d Hz @ %ld Hz)\n",CFM_CLK,\
-               CONFIG_SYS_CLK / (2* ((CFM_CLK & 0x3F)+1) * (1+((CFM_CLK & 0x40)>>6)*7)),\
-               CONFIG_SYS_CLK);
-       MCFCFM_SACC = 0;
-       MCFCFM_DACC = 0;
-
-       if (MCFCFM_SEC & MCFCFM_SEC_KEYEN)
-               puts("CFM backdoor access is enabled\n");
-       if (MCFCFM_SEC & MCFCFM_SEC_SECSTAT)
-               puts("CFM securety is enabled\n");
-
-       #ifdef CONFIG_M5281
-               info->flash_id = (FREESCALE_MANUFACT & FLASH_VENDMASK) |
-                                (FREESCALE_ID_MCF5281 & FLASH_TYPEMASK);
-               info->size = 256*1024;
-               info->sector_count = 16;
-       #else
-               info->flash_id = (FREESCALE_MANUFACT & FLASH_VENDMASK) |
-                                (FREESCALE_ID_MCF5282 & FLASH_TYPEMASK);
-               info->size = 512*1024;
-               info->sector_count = 32;
-       #endif
-       protection = MCFCFM_PROT;
-       for (sector = 0; sector < info->sector_count; sector++)
-       {
-               if (sector == 0)
-               {
-                       info->start[sector] = CONFIG_SYS_INT_FLASH_BASE;
-               }
-               else
-               {
-                       info->start[sector] = info->start[sector-1] + 0x04000;
-               }
-               info->protect[sector] = protection & 1;
-               protection >>= 1;
-       }
-}
-
-int cfm_flash_readycheck(int checkblank)
-{
-       int     rc;
-       unsigned char state;
-
-       rc      = ERR_OK;
-       while (!(MCFCFM_USTAT & MCFCFM_USTAT_CCIF));
-       state = MCFCFM_USTAT;
-       if (state & MCFCFM_USTAT_ACCERR)
-       {
-               debug ("%s(): CFM access error",__FUNCTION__);
-               rc = ERR_PROG_ERROR;
-       }
-       if (state & MCFCFM_USTAT_PVIOL)
-       {
-               debug ("%s(): CFM protection violation",__FUNCTION__);
-               rc = ERR_PROTECTED;
-       }
-       if (checkblank)
-       {
-               if (!(state & MCFCFM_USTAT_BLANK))
-               {
-                       debug ("%s(): CFM erras error",__FUNCTION__);
-                       rc = ERR_NOT_ERASED;
-               }
-       }
-       MCFCFM_USTAT = state & 0x34; /* reset state */
-       return rc;
-}
-
-/* Erase 16KiB = 8 2KiB pages */
-
-int cfm_flash_erase_sector (flash_info_t * info, int sector)
-{
-       ulong address;
-       int page;
-       int rc;
-       rc= ERR_OK;
-       address = cmf_backdoor_address(info->start[sector]);
-       for (page=0; (page<8) && (rc==ERR_OK); page++)
-       {
-               *(volatile __u32*) address = 0;
-               MCFCFM_CMD = MCFCFM_CMD_PGERS;
-               MCFCFM_USTAT = MCFCFM_USTAT_CBEIF;
-               rc = cfm_flash_readycheck(0);
-               if (rc==ERR_OK)
-               {
-                       *(volatile __u32*) address = 0;
-                       MCFCFM_CMD = MCFCFM_CMD_PGERSVER;
-                       MCFCFM_USTAT = MCFCFM_USTAT_CBEIF;
-                       rc = cfm_flash_readycheck(1);
-               }
-               address += 0x800;
-       }
-       return rc;
-}
-
-int cfm_flash_write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
-{
-       int rc;
-       ulong dest, data;
-
-       rc = ERR_OK;
-       if (addr & 3)
-       {
-               debug ("Byte and Word alignment not supported\n");
-               rc = ERR_ALIGN;
-       }
-       if (cnt & 3)
-       {
-               debug ("Byte and Word transfer not supported\n");
-               rc = ERR_ALIGN;
-       }
-       dest = cmf_backdoor_address(addr);
-       while ((cnt>=4) && (rc == ERR_OK))
-       {
-               data = *((volatile u32 *) src);
-               *(volatile u32*) dest = data;
-               MCFCFM_CMD = MCFCFM_CMD_PGM;
-               MCFCFM_USTAT = MCFCFM_USTAT_CBEIF;
-               rc = cfm_flash_readycheck(0);
-               if (*(volatile u32*) addr != data) rc = ERR_PROG_ERROR;
-               src +=4;
-               dest +=4;
-               addr +=4;
-               cnt -=4;
-       }
-       return rc;
-}
-
-#ifdef CONFIG_SYS_FLASH_PROTECTION
-
-int cfm_flash_protect(flash_info_t * info,long sector,int prot)
-{
-       int rc;
-
-       rc= ERR_OK;
-       if (prot)
-       {
-               MCFCFM_PROT |= (1<<sector);
-               info->protect[sector]=1;
-       }
-       else
-       {
-               MCFCFM_PROT &= ~(1<<sector);
-               info->protect[sector]=0;
-       }
-       return rc;
-}
-
-#endif
-
-#endif
diff --git a/board/BuS/eb_cpu5282/cfm_flash.h b/board/BuS/eb_cpu5282/cfm_flash.h
deleted file mode 100644 (file)
index ed4e794..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Basic Flash Driver for Freescale MCF 5282 internal FLASH
- *
- * (C) Copyright 2005 BuS Elektronik GmbH & Co.KG <esw@bus-elektonik.de>
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#ifndef __CFM_FLASH_H_
-#define __CFM_FLASH_H_
-
-#define        FREESCALE_MANUFACT 0xFACFFACF
-#define        FREESCALE_ID_MCF5281 0x5281
-#define        FREESCALE_ID_MCF5282 0x5282
-
-extern void cfm_flash_print_info (flash_info_t * info);
-extern int cfm_flash_erase_sector (flash_info_t * info, int sector);
-extern void cfm_flash_init (flash_info_t * info);
-extern int cfm_flash_write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt);
-#ifdef CONFIG_SYS_FLASH_PROTECTION
-extern int cfm_flash_protect(flash_info_t * info,long sector,int prot);
-#endif
-
-#endif
index d64ad1b705c41eedee97056898f3053d84ee9abb..f73431eff59b4d018236bd04fbe4672c6d697a57 100644 (file)
 
 DECLARE_GLOBAL_DATA_PTR;
 
+#ifdef CONFIG_VIDEO
 unsigned long display_width;
 unsigned long display_height;
+#endif
 
 /*---------------------------------------------------------------------------*/
 
 int checkboard (void)
 {
-       puts ("Board: MCF-EV1 + MCF-EV23 (BuS Elektronik GmbH & Co. KG)\n");
+       puts("Board: EB+CPU5282 (BuS Elektronik GmbH & Co. KG)\n");
 #if (CONFIG_SYS_TEXT_BASE ==  CONFIG_SYS_INT_FLASH_BASE)
-       puts ("       Boot from Internal FLASH\n");
+       puts("       Boot from Internal FLASH\n");
 #endif
-
        return 0;
 }
 
@@ -55,29 +56,39 @@ phys_size_t initdram (int board_type)
        int size, i;
 
        size = 0;
-       MCFSDRAMC_DCR = MCFSDRAMC_DCR_RTIM_6
-                       | MCFSDRAMC_DCR_RC ((15 * CONFIG_SYS_CLK) >> 4);
+       MCFSDRAMC_DCR = MCFSDRAMC_DCR_RTIM_6 |
+                       MCFSDRAMC_DCR_RC((15 * CONFIG_SYS_CLK / 1000000) >> 4);
+       asm (" nop");
 #ifdef CONFIG_SYS_SDRAM_BASE0
-
-       MCFSDRAMC_DACR0 = MCFSDRAMC_DACR_BASE (CONFIG_SYS_SDRAM_BASE0)
-                       | MCFSDRAMC_DACR_CASL (1)
-                       | MCFSDRAMC_DACR_CBM (3)
-                       | MCFSDRAMC_DACR_PS_16;
+       MCFSDRAMC_DACR0 = MCFSDRAMC_DACR_BASE(CONFIG_SYS_SDRAM_BASE0)|
+               MCFSDRAMC_DACR_CASL(1) | MCFSDRAMC_DACR_CBM(3) |
+               MCFSDRAMC_DACR_PS_32;
+       asm (" nop");
 
        MCFSDRAMC_DMR0 = MCFSDRAMC_DMR_BAM_16M | MCFSDRAMC_DMR_V;
+       asm (" nop");
 
        MCFSDRAMC_DACR0 |= MCFSDRAMC_DACR_IP;
+       asm (" nop");
+       for (i = 0; i < 10; i++)
+               asm (" nop");
 
-       *(unsigned short *) (CONFIG_SYS_SDRAM_BASE0) = 0xA5A5;
+       *(unsigned long *)(CONFIG_SYS_SDRAM_BASE0) = 0xA5A5A5A5;
+       asm (" nop");
        MCFSDRAMC_DACR0 |= MCFSDRAMC_DACR_RE;
+       asm (" nop");
+
        for (i = 0; i < 2000; i++)
                asm (" nop");
-       mbar_writeLong (MCFSDRAMC_DACR0,
-                       mbar_readLong (MCFSDRAMC_DACR0) | MCFSDRAMC_DACR_IMRS);
-       *(unsigned int *) (CONFIG_SYS_SDRAM_BASE0 + 0x220) = 0xA5A5;
-       size += CONFIG_SYS_SDRAM_SIZE * 1024 * 1024;
+
+       MCFSDRAMC_DACR0 |= MCFSDRAMC_DACR_IMRS;
+       asm (" nop");
+       /* write SDRAM mode register */
+       *(unsigned long *)(CONFIG_SYS_SDRAM_BASE0 + 0x80440) = 0xA5A5A5A5;
+       asm (" nop");
+       size += CONFIG_SYS_SDRAM_SIZE0 * 1024 * 1024;
 #endif
-#ifdef CONFIG_SYS_SDRAM_BASE1
+#ifdef CONFIG_SYS_SDRAM_BASE1xx
        MCFSDRAMC_DACR1 = MCFSDRAMC_DACR_BASE (CONFIG_SYS_SDRAM_BASE1)
                        | MCFSDRAMC_DACR_CASL (1)
                        | MCFSDRAMC_DACR_CBM (3)
@@ -134,38 +145,74 @@ int testdram (void)
 }
 #endif
 
+#if defined(CONFIG_HW_WATCHDOG)
+
+void hw_watchdog_init(void)
+{
+       char *s;
+       int enable;
+
+       enable = 1;
+       s = getenv("watchdog");
+       if (s != NULL)
+               if ((strncmp(s, "off", 3) == 0) || (strncmp(s, "0", 1) == 0))
+                       enable = 0;
+       if (enable)
+               MCFGPTA_GPTDDR  |= (1<<2);
+       else
+               MCFGPTA_GPTDDR  &= ~(1<<2);
+}
+
+void hw_watchdog_reset(void)
+{
+       MCFGPTA_GPTPORT  ^= (1<<2);
+}
+#endif
+
 int misc_init_r(void)
 {
 #ifdef CONFIG_HW_WATCHDOG
        hw_watchdog_init();
-#endif
-#ifndef CONFIG_VIDEO
-       vcxk_init(16, 16);
 #endif
        return 1;
 }
 
-#if defined(CONFIG_VIDEO)
+void __led_toggle(led_id_t mask)
+{
+       MCFGPTA_GPTPORT ^= (1 << 3);
+}
 
-/*
- ****h* EB+CPU5282-T1/drv_video_init
- * FUNCTION
- ***
- */
+void __led_init(led_id_t mask, int state)
+{
+       __led_set(mask, state);
+       MCFGPTA_GPTDDR  |= (1 << 3);
+}
+
+void __led_set(led_id_t mask, int state)
+{
+       if (state == STATUS_LED_ON)
+               MCFGPTA_GPTPORT |= (1 << 3);
+       else
+               MCFGPTA_GPTPORT &= ~(1 << 3);
+}
+
+#if defined(CONFIG_VIDEO)
 
 int drv_video_init(void)
 {
        char *s;
+#ifdef CONFIG_SPLASH_SCREEN
        unsigned long splash;
-
+#endif
        printf("Init Video as ");
-
-       if ((s = getenv("displaywidth")) != NULL)
+       s = getenv("displaywidth");
+       if (s != NULL)
                display_width = simple_strtoul(s, NULL, 10);
        else
                display_width = 256;
 
-       if ((s = getenv("displayheight")) != NULL)
+       s = getenv("displayheight");
+       if (s != NULL)
                display_height = simple_strtoul(s, NULL, 10);
        else
                display_height = 256;
@@ -178,10 +225,9 @@ int drv_video_init(void)
        vcxk_init(display_width, display_height);
 
 #ifdef CONFIG_SPLASH_SCREEN
-       if ((s = getenv("splashimage")) != NULL) {
-               debug("use splashimage: %s\n", s);
+       s = getenv("splashimage");
+       if (s != NULL) {
                splash = simple_strtoul(s, NULL, 16);
-               debug("use splashimage: %x\n", splash);
                vcxk_acknowledge_wait();
                video_display_bitmap(splash, 0, 0);
        }
diff --git a/board/BuS/eb_cpu5282/flash.c b/board/BuS/eb_cpu5282/flash.c
deleted file mode 100644 (file)
index 8b7f957..0000000
+++ /dev/null
@@ -1,415 +0,0 @@
-/*
- * (C) Copyright 2005
- * BuS Elektronik GmbH & Co.KG <esw@bus-elektonik.de>
- *
- * Based On
- * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include <common.h>
-#include  "cfm_flash.h"
-
-#define PHYS_FLASH_1 CONFIG_SYS_FLASH_BASE
-#define FLASH_BANK_SIZE 0x200000
-
-flash_info_t flash_info[CONFIG_SYS_MAX_FLASH_BANKS];
-
-void flash_print_info (flash_info_t * info)
-{
-       int i;
-
-       switch (info->flash_id & FLASH_VENDMASK) {
-       case (AMD_MANUFACT & FLASH_VENDMASK):
-               printf ("AMD: ");
-               switch (info->flash_id & FLASH_TYPEMASK) {
-               case (AMD_ID_LV160B & FLASH_TYPEMASK):
-                       printf ("AM29LV160B (16Bit)\n");
-                       break;
-               default:
-                       printf ("Unknown Chip Type\n");
-                       break;
-               }
-               break;
-       case FREESCALE_MANUFACT & FLASH_VENDMASK:
-               cfm_flash_print_info (info);
-               break;
-       default:
-               printf ("Unknown Vendor ");
-               break;
-       }
-
-       puts ("  Size: ");
-       if ((info->size >> 20) > 0)
-       {
-               printf ("%ld MiB",info->size >> 20);
-       }
-       else
-       {
-               printf ("%ld KiB",info->size >> 10);
-       }
-       printf (" in %d Sectors\n", info->sector_count);
-
-       printf ("  Sector Start Addresses:");
-       for (i = 0; i < info->sector_count; i++) {
-               if ((i % 4) == 0) {
-                       printf ("\n    ");
-               }
-               printf ("%02d: %08lX%s  ", i,info->start[i],
-                       info->protect[i] ? " P" : "  ");
-       }
-       printf ("\n\n");
-}
-
-unsigned long flash_init (void)
-{
-       int i, j;
-       ulong size = 0;
-
-       for (i = 0; i < CONFIG_SYS_MAX_FLASH_BANKS; i++) {
-               ulong flashbase = 0;
-
-               switch (i)
-               {
-               case 1:
-                       flash_info[i].flash_id =
-                               (AMD_MANUFACT & FLASH_VENDMASK) |
-                               (AMD_ID_LV160B & FLASH_TYPEMASK);
-                       flash_info[i].size = FLASH_BANK_SIZE;
-                       flash_info[i].sector_count = CONFIG_SYS_MAX_FLASH_SECT;
-                       memset (flash_info[i].protect, 0, CONFIG_SYS_MAX_FLASH_SECT);
-                       flashbase = PHYS_FLASH_1;
-                       for (j = 0; j < flash_info[i].sector_count; j++) {
-                               if (j == 0) {
-                                       /* 1st is 16 KiB */
-                                       flash_info[i].start[j] = flashbase;
-                               }
-                               if ((j >= 1) && (j <= 2)) {
-                               /* 2nd and 3rd are 8 KiB */
-                                       flash_info[i].start[j] =
-                                               flashbase + 0x4000 + 0x2000 * (j - 1);
-                               }
-                               if (j == 3) {
-                                       /* 4th is 32 KiB */
-                                       flash_info[i].start[j] = flashbase + 0x8000;
-                               }
-                               if ((j >= 4) && (j <= 34)) {
-                                       /* rest is 256 KiB */
-                                       flash_info[i].start[j] =
-                                               flashbase + 0x10000 + 0x10000 * (j - 4);
-                               }
-                       }
-                       break;
-               case 0:
-                       cfm_flash_init (&flash_info[i]);
-                       break;
-               default:
-                       panic ("configured to many flash banks!\n");
-               }
-
-               size += flash_info[i].size;
-       }
-
-       flash_protect (FLAG_PROTECT_SET,
-                      CONFIG_SYS_FLASH_BASE,
-                      CONFIG_SYS_FLASH_BASE + 0xffff, &flash_info[0]);
-
-       return size;
-}
-
-#define CMD_READ_ARRAY         0x00F0
-#define CMD_UNLOCK1            0x00AA
-#define CMD_UNLOCK2            0x0055
-#define CMD_ERASE_SETUP                0x0080
-#define CMD_ERASE_CONFIRM      0x0030
-#define CMD_PROGRAM            0x00A0
-#define CMD_UNLOCK_BYPASS      0x0020
-
-#define MEM_FLASH_ADDR1                (*(volatile u16 *)(info->start[0] + (0x00000555<<1)))
-#define MEM_FLASH_ADDR2                (*(volatile u16 *)(info->start[0] + (0x000002AA<<1)))
-
-
-#define BIT_ERASE_DONE         0x0080
-#define BIT_RDY_MASK           0x0080
-#define BIT_PROGRAM_ERROR      0x0020
-#define BIT_TIMEOUT            0x80000000      /* our flag */
-
-#define ERR_READY -1
-
-int amd_flash_erase_sector(flash_info_t * info, int sector)
-{
-       int state;
-       ulong result;
-       ulong start;
-
-       volatile u16 *addr =
-                               (volatile u16 *) (info->start[sector]);
-
-       MEM_FLASH_ADDR1 = CMD_UNLOCK1;
-       MEM_FLASH_ADDR2 = CMD_UNLOCK2;
-       MEM_FLASH_ADDR1 = CMD_ERASE_SETUP;
-
-       MEM_FLASH_ADDR1 = CMD_UNLOCK1;
-       MEM_FLASH_ADDR2 = CMD_UNLOCK2;
-       *addr = CMD_ERASE_CONFIRM;
-
-       /* wait until flash is ready */
-       state = 0;
-       start = get_timer(0);
-
-       do {
-               result = *addr;
-
-               /* check timeout */
-               if (get_timer(start) > CONFIG_SYS_FLASH_ERASE_TOUT) {
-                       MEM_FLASH_ADDR1 = CMD_READ_ARRAY;
-                       state = ERR_TIMOUT;
-               }
-
-               if (!state && (result & 0xFFFF) & BIT_ERASE_DONE)
-                       state = ERR_READY;
-       }
-       while (!state);
-       if (state == ERR_READY)
-               state = ERR_OK;
-
-       MEM_FLASH_ADDR1 = CMD_READ_ARRAY;
-
-       return state;
-}
-
-int flash_erase (flash_info_t * info, int s_first, int s_last)
-{
-       int iflag, cflag;
-       int sector;
-       int rc;
-
-       rc = ERR_OK;
-
-       if (info->flash_id == FLASH_UNKNOWN)
-       {
-               rc = ERR_UNKNOWN_FLASH_TYPE;
-       } /* (info->flash_id == FLASH_UNKNOWN) */
-
-       if ((s_first < 0) || (s_first > s_last) || s_last >= info->sector_count)
-       {
-               rc = ERR_INVAL;
-       }
-
-       cflag = icache_status ();
-       icache_disable ();
-       iflag = disable_interrupts ();
-
-       for (sector = s_first; (sector <= s_last) && (rc == ERR_OK); sector++) {
-
-               if (info->protect[sector])
-               {
-                       putc('P'); /*  protected sector will not erase */
-               }
-               else
-               {
-                       /* erase on unprotected sector */
-                       puts("E\b");
-                       switch (info->flash_id & FLASH_VENDMASK)
-                       {
-                       case (AMD_MANUFACT & FLASH_VENDMASK):
-                               rc = amd_flash_erase_sector(info,sector);
-                               break;
-                       case (FREESCALE_MANUFACT & FLASH_VENDMASK):
-                               rc = cfm_flash_erase_sector(info,sector);
-                               break;
-                       default:
-                               return ERR_UNKNOWN_FLASH_VENDOR;
-                       }
-                       putc('.');
-               }
-       }
-       if (rc!=ERR_OK)
-       {
-               printf ("\n   ");
-               flash_perror (rc);
-       }
-       else
-       {
-               printf (" done\n");
-       }
-
-       udelay (10000); /* allow flash to settle - wait 10 ms */
-
-       if (iflag)
-               enable_interrupts ();
-
-       if (cflag)
-               icache_enable ();
-
-       return rc;
-}
-
-volatile static int amd_write_word (flash_info_t * info, ulong dest, u16 data)
-{
-       volatile u16 *addr;
-       ulong result;
-       int cflag, iflag;
-       int state;
-       ulong start;
-
-       /*
-        * Check if Flash is (sufficiently) erased
-        */
-       addr = (volatile u16 *) dest;
-
-       result = *addr;
-       if ((result & data) != data)
-               return ERR_NOT_ERASED;
-
-       /*
-        * Disable interrupts which might cause a timeout
-        * here. Remember that our exception vectors are
-        * at address 0 in the flash, and we don't want a
-        * (ticker) exception to happen while the flash
-        * chip is in programming mode.
-        */
-
-       cflag = icache_status ();
-       icache_disable ();
-       iflag = disable_interrupts ();
-
-       MEM_FLASH_ADDR1 = CMD_UNLOCK1;
-       MEM_FLASH_ADDR2 = CMD_UNLOCK2;
-       MEM_FLASH_ADDR1 = CMD_PROGRAM;
-       *addr = data;
-
-       /* arm simple, non interrupt dependent timer */
-       start = get_timer(0);
-
-       /* wait until flash is ready */
-       state = 0;
-       do {
-               result = *addr;
-
-               /* check timeout */
-               if (get_timer(start) > CONFIG_SYS_FLASH_ERASE_TOUT) {
-                               state = ERR_TIMOUT;
-               }
-               if (!state && ((result & BIT_RDY_MASK) == (data & BIT_RDY_MASK)))
-                       state = ERR_READY;
-
-       } while (!state);
-
-       *addr = CMD_READ_ARRAY;
-
-       if (state == ERR_READY)
-               state = ERR_OK;
-       if ((*addr != data) && (state != ERR_TIMOUT))
-               state = ERR_PROG_ERROR;
-
-       if (iflag)
-               enable_interrupts ();
-
-       if (cflag)
-               icache_enable ();
-
-       return state;
-}
-
-int amd_flash_write_buff(flash_info_t * info, uchar * src, ulong addr, ulong cnt)
-{
-       int rc;
-       ulong dest;
-       u16 data;
-
-       rc = ERR_OK;
-       if (addr & 1)
-       {
-               debug ("Byte alignment not supported\n");
-               rc = ERR_ALIGN;
-       }
-       if (cnt & 1)
-       {
-               debug ("Byte transfer not supported\n");
-               rc = ERR_ALIGN;
-       }
-
-       dest = addr;
-       while ((cnt>=2) && (rc == ERR_OK))
-       {
-               data = *((volatile u16 *) src);
-               rc=amd_write_word (info,dest,data);
-               src +=2;
-               dest +=2;
-               cnt -=2;
-       }
-       return rc;
-}
-
-int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
-{
-       int rc;
-
-       switch (info->flash_id & FLASH_VENDMASK)
-       {
-               case (AMD_MANUFACT & FLASH_VENDMASK):
-                       rc = amd_flash_write_buff(info,src,addr,cnt);
-                       break;
-               case (FREESCALE_MANUFACT & FLASH_VENDMASK):
-                       rc = cfm_flash_write_buff(info,src,addr,cnt);
-                       break;
-               default:
-                       rc = ERR_UNKNOWN_FLASH_VENDOR;
-       }
-       return rc;
-
-}
-int amd_flash_protect(flash_info_t * info,long sector,int prot)
-{
-       int rc;
-       rc= ERR_OK;
-       if (prot)
-       {
-               info->protect[sector]=1;
-       }
-       else
-       {
-               info->protect[sector]=0;
-       }
-       return rc;
-}
-
-#ifdef CONFIG_SYS_FLASH_PROTECTION
-
-int flash_real_protect(flash_info_t * info,long sector,int prot)
-{
-       int rc;
-
-       switch (info->flash_id & FLASH_VENDMASK)
-       {
-               case (AMD_MANUFACT & FLASH_VENDMASK):
-                       rc = amd_flash_protect(info,sector,prot);
-                       break;
-               case (FREESCALE_MANUFACT & FLASH_VENDMASK):
-                       rc = cfm_flash_protect(info,sector,prot);
-                       break;
-               default:
-                       rc = ERR_UNKNOWN_FLASH_VENDOR;
-       }
-       return rc;
-}
-
-#endif
index c41f11d60c75a4ed1687a5dca0334ac728262680..a3079dbca367e2b7cb60b5c25a5c50ac8f22bc14 100644 (file)
 #include <asm/arch/sys_proto.h>
 #include <asm/io.h>
 #include <nand.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <fsl_pmic.h>
 #include <asm/gpio.h>
 #include "qong_fpga.h"
 #include <watchdog.h>
+#include <errno.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -172,10 +173,15 @@ int board_late_init(void)
 {
        u32 val;
        struct pmic *p;
+       int ret;
 
-       pmic_init();
-       p = get_pmic();
+       ret = pmic_init(I2C_PMIC);
+       if (ret)
+               return ret;
 
+       p = pmic_get("FSL_PMIC");
+       if (!p)
+               return -ENODEV;
        /* Enable RTC battery */
        pmic_reg_read(p, REG_POWER_CTL0, &val);
        pmic_reg_write(p, REG_POWER_CTL0, val | COINCHEN);
index 9f8bc53e711c02fd40ed9f2b58b35417a24a277a..bc60632aa0b34662a10243f30c9f6a42f856bbb0 100644 (file)
@@ -30,8 +30,9 @@
 #include <asm/arch/imx-regs.h>
 #include <asm/arch/sys_proto.h>
 #include <watchdog.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <fsl_pmic.h>
+#include <errno.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -83,10 +84,15 @@ int board_late_init(void)
 {
        u32 val;
        struct pmic *p;
+       int ret;
 
-       pmic_init();
-       p = get_pmic();
+       ret = pmic_init(I2C_PMIC);
+       if (ret)
+               return ret;
 
+       p = pmic_get("FSL_PMIC");
+       if (!p)
+               return -ENODEV;
        /* Enable RTC battery */
        pmic_reg_read(p, REG_POWER_CTL0, &val);
        pmic_reg_write(p, REG_POWER_CTL0, val | COINCHEN);
index a12531fb892cf5dc7b0fb5e234fec6361f60a3b5..c835b0edeb573aba1d5cffb39831157dce4bea5e 100644 (file)
@@ -31,7 +31,7 @@
 #include <asm/arch/mx35_pins.h>
 #include <asm/arch/iomux.h>
 #include <i2c.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <fsl_pmic.h>
 #include <mmc.h>
 #include <fsl_esdhc.h>
@@ -207,7 +207,9 @@ int board_init(void)
 static inline int pmic_detect(void)
 {
        unsigned int id;
-       struct pmic *p = get_pmic();
+       struct pmic *p = pmic_get("FSL_PMIC");
+       if (!p)
+               return -ENODEV;
 
        pmic_reg_read(p, REG_IDENTIFICATION, &id);
 
@@ -231,10 +233,14 @@ int board_late_init(void)
        u8 val;
        u32 pmic_val;
        struct pmic *p;
+       int ret;
+
+       ret = pmic_init(I2C_PMIC);
+       if (ret)
+               return ret;
 
-       pmic_init();
        if (pmic_detect()) {
-               p = get_pmic();
+               p = pmic_get("FSL_PMIC");
                mxc_request_iomux(MX35_PIN_WATCHDOG_RST, MUX_CONFIG_SION |
                                        MUX_CONFIG_ALT1);
 
index bc9d96665397d63f832123cb7376b3e21295a3bc..d1ef431895a0786f72eb4ae42413202ee9200e97 100644 (file)
@@ -34,7 +34,7 @@
 #include <i2c.h>
 #include <mmc.h>
 #include <fsl_esdhc.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <fsl_pmic.h>
 #include <mc13892.h>
 #include <usb/ehci-fsl.h>
@@ -247,9 +247,15 @@ static void power_init(void)
        unsigned int val;
        struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)MXC_CCM_BASE;
        struct pmic *p;
+       int ret;
+
+       ret = pmic_init(I2C_PMIC);
+       if (ret)
+               return;
 
-       pmic_init();
-       p = get_pmic();
+       p = pmic_get("FSL_PMIC");
+       if (!p)
+               return;
 
        /* Write needed to Power Gate 2 register */
        pmic_reg_read(p, REG_POWER_MISC, &val);
index bb4621d62ece80a139b2138a991360867540a8d5..12735014767b9d59908d9f5bc7fab99d0436867e 100644 (file)
@@ -34,7 +34,7 @@
 #include <i2c.h>
 #include <mmc.h>
 #include <fsl_esdhc.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <fsl_pmic.h>
 #include <asm/gpio.h>
 #include <mc13892.h>
@@ -123,9 +123,15 @@ void power_init(void)
 {
        unsigned int val;
        struct pmic *p;
+       int ret;
+
+       ret = pmic_init(I2C_PMIC);
+       if (ret)
+               return;
 
-       pmic_init();
-       p = get_pmic();
+       p = pmic_get("FSL_PMIC");
+       if (!p)
+               return;
 
        /* Set VDDA to 1.25V */
        pmic_reg_read(p, REG_SW_2, &val);
index f8f0503f9f99b23007e704fd6ec702a9c70dff90..81c511cdc187fd22cd4887dd2e0a0e79a88d819d 100644 (file)
@@ -37,7 +37,7 @@
 #include <mmc.h>
 #include <fsl_esdhc.h>
 #include <asm/gpio.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <dialog_pmic.h>
 #include <fsl_pmic.h>
 #include <linux/fb.h>
@@ -345,10 +345,16 @@ static int power_init(void)
        unsigned int val;
        int ret = -1;
        struct pmic *p;
+       int retval;
 
        if (!i2c_probe(CONFIG_SYS_DIALOG_PMIC_I2C_ADDR)) {
-               pmic_dialog_init();
-               p = get_pmic();
+               retval = pmic_dialog_init(I2C_PMIC);
+               if (retval)
+                       return retval;
+
+               p = pmic_get("DIALOG_PMIC");
+               if (!p)
+                       return -ENODEV;
 
                /* Set VDDA to 1.25V */
                val = DA9052_BUCKCORE_BCOREEN | DA_BUCKCORE_VBCORE_1_250V;
@@ -364,8 +370,13 @@ static int power_init(void)
        }
 
        if (!i2c_probe(CONFIG_SYS_FSL_PMIC_I2C_ADDR)) {
-               pmic_init();
-               p = get_pmic();
+               retval = pmic_init(I2C_PMIC);
+               if (retval)
+                       return retval;
+
+               p = pmic_get("DIALOG_PMIC");
+               if (!p)
+                       return -ENODEV;
 
                /* Set VDDGP to 1.25V for 1GHz on SW1 */
                pmic_reg_read(p, REG_SW_0, &val);
index c2b2823ef9dab8fe146af8c5ada34b9fe08fa86a..69d41db530d0ce5b9a5244adfd64dacc798dc6c2 100644 (file)
@@ -33,7 +33,7 @@
 #include <i2c.h>
 #include <mmc.h>
 #include <fsl_esdhc.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <fsl_pmic.h>
 #include <mc13892.h>
 
@@ -173,9 +173,15 @@ static void power_init(void)
        unsigned int val;
        struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)MXC_CCM_BASE;
        struct pmic *p;
+       int ret;
+
+       ret = pmic_init(I2C_PMIC);
+       if (ret)
+               return;
 
-       pmic_init();
-       p = get_pmic();
+       p = pmic_get("FSL_PMIC");
+       if (!p)
+               return;
 
        /* Write needed to Power Gate 2 register */
        pmic_reg_read(p, REG_POWER_MISC, &val);
index 143fcefedf55e710c055d92d859eebc2ec225724..0c2cb795dd66448bb44e64fce3703609acaef16d 100644 (file)
 #include <common.h>
 #include <netdev.h>
 #include <command.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <fsl_pmic.h>
 #include <mc13783.h>
 #include <asm/arch/clock.h>
 #include <asm/arch/sys_proto.h>
 #include <asm/io.h>
+#include <errno.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -195,14 +196,21 @@ int board_mmc_init(bd_t *bis)
 {
        u32 val;
        struct pmic *p;
+       int ret;
 
        /*
        * this is the first driver to use the pmic, so call
        * pmic_init() here. board_late_init() is too late for
        * the MMC driver.
        */
-       pmic_init();
-       p = get_pmic();
+
+       ret = pmic_init(I2C_PMIC);
+       if (ret)
+               return ret;
+
+       p = pmic_get("FSL_PMIC");
+       if (!p)
+               return -ENODEV;
 
        /* configure pins for SDHC1 only */
        mx31_gpio_mux(IOMUX_MODE(MUX_CTL_SD1_CLK, MUX_CTL_FUNC));
index e8fb1ea4130a740480cd685c0cb09d9c9d732d51..ff76963925fab27b6c545cdb096b51e110775744 100644 (file)
 #include <common.h>
 #include <asm/arch/gpio.h>
 #include <asm/arch/mmc.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <usb/s3c_udc.h>
 #include <asm/arch/cpu.h>
-#include <max8998_pmic.h>
+#include <power/max8998_pmic.h>
 DECLARE_GLOBAL_DATA_PTR;
 
 static struct s5pc110_gpio *s5pc110_gpio;
@@ -41,9 +41,17 @@ int board_init(void)
        gd->bd->bi_arch_number = MACH_TYPE_GONI;
        gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;
 
-#if defined(CONFIG_PMIC)
-       pmic_init();
-#endif
+       return 0;
+}
+
+int power_init_board(void)
+{
+       int ret;
+
+       ret = pmic_init(I2C_5);
+       if (ret)
+               return ret;
+
        return 0;
 }
 
@@ -108,7 +116,9 @@ static int s5pc1xx_phy_control(int on)
 {
        int ret;
        static int status;
-       struct pmic *p = get_pmic();
+       struct pmic *p = pmic_get("MAX8998_PMIC");
+       if (!p)
+               return -ENODEV;
 
        if (pmic_probe(p))
                return -1;
index e11a8922fca98983c9b4c4841f66a6a3786bf199..e540190984740da822678724a71ffed0764b1cb2 100644 (file)
 #include <asm/arch/mipi_dsim.h>
 #include <asm/arch/watchdog.h>
 #include <asm/arch/power.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <usb/s3c_udc.h>
-#include <max8997_pmic.h>
+#include <power/max8997_pmic.h>
 #include <libtizen.h>
+#include <power/max8997_muic.h>
+#include <power/battery.h>
+#include <power/max17042_fg.h>
 
 #include "setup.h"
 
@@ -68,10 +71,6 @@ int board_init(void)
        check_hw_revision();
        printf("HW Revision:\t0x%x\n", board_rev);
 
-#if defined(CONFIG_PMIC)
-       pmic_init();
-#endif
-
        return 0;
 }
 
@@ -90,6 +89,275 @@ void i2c_init_board(void)
        s5p_gpio_direction_output(&gpio2->y4, 1, 1);
 }
 
+static void trats_low_power_mode(void)
+{
+       struct exynos4_clock *clk =
+           (struct exynos4_clock *)samsung_get_base_clock();
+       struct exynos4_power *pwr =
+           (struct exynos4_power *)samsung_get_base_power();
+
+       /* Power down CORE1 */
+       /* LOCAL_PWR_CFG [1:0] 0x3 EN, 0x0 DIS */
+       writel(0x0, &pwr->arm_core1_configuration);
+
+       /* Change the APLL frequency */
+       /* ENABLE (1 enable) | LOCKED (1 locked)  */
+       /* [31]              | [29]               */
+       /* FSEL      | MDIV          | PDIV            | SDIV */
+       /* [27]      | [25:16]       | [13:8]          | [2:0]      */
+       writel(0xa0c80604, &clk->apll_con0);
+
+       /* Change CPU0 clock divider */
+       /* CORE2_RATIO  | APLL_RATIO   | PCLK_DBG_RATIO | ATB_RATIO  */
+       /* [30:28]      | [26:24]      | [22:20]        | [18:16]    */
+       /* PERIPH_RATIO | COREM1_RATIO | COREM0_RATIO   | CORE_RATIO */
+       /* [14:12]      | [10:8]       | [6:4]          | [2:0]      */
+       writel(0x00000100, &clk->div_cpu0);
+
+       /* CLK_DIV_STAT_CPU0 - wait until clock gets stable (0 = stable) */
+       while (readl(&clk->div_stat_cpu0) & 0x1111111)
+               continue;
+
+       /* Change clock divider ratio for DMC */
+       /* DMCP_RATIO                  | DMCD_RATIO  */
+       /* [22:20]                     | [18:16]     */
+       /* DMC_RATIO | DPHY_RATIO | ACP_PCLK_RATIO   | ACP_RATIO */
+       /* [14:12]   | [10:8]     | [6:4]            | [2:0]     */
+       writel(0x13113117, &clk->div_dmc0);
+
+       /* CLK_DIV_STAT_DMC0 - wait until clock gets stable (0 = stable) */
+       while (readl(&clk->div_stat_dmc0) & 0x11111111)
+               continue;
+
+       /* Turn off unnecessary power domains */
+       writel(0x0, &pwr->xxti_configuration);  /* XXTI */
+       writel(0x0, &pwr->cam_configuration);   /* CAM */
+       writel(0x0, &pwr->tv_configuration);    /* TV */
+       writel(0x0, &pwr->mfc_configuration);   /* MFC */
+       writel(0x0, &pwr->g3d_configuration);   /* G3D */
+       writel(0x0, &pwr->gps_configuration);   /* GPS */
+       writel(0x0, &pwr->gps_alive_configuration);     /* GPS_ALIVE */
+
+       /* Turn off unnecessary clocks */
+       writel(0x0, &clk->gate_ip_cam); /* CAM */
+       writel(0x0, &clk->gate_ip_tv);          /* TV */
+       writel(0x0, &clk->gate_ip_mfc); /* MFC */
+       writel(0x0, &clk->gate_ip_g3d); /* G3D */
+       writel(0x0, &clk->gate_ip_image);       /* IMAGE */
+       writel(0x0, &clk->gate_ip_gps); /* GPS */
+}
+
+static int pmic_init_max8997(void)
+{
+       struct pmic *p = pmic_get("MAX8997_PMIC");
+       int i = 0, ret = 0;
+       u32 val;
+
+       if (pmic_probe(p))
+               return -1;
+
+       /* BUCK1 VARM: 1.2V */
+       val = (1200000 - 650000) / 25000;
+       ret |= pmic_reg_write(p, MAX8997_REG_BUCK1DVS1, val);
+       val = ENBUCK | ACTIVE_DISCHARGE;                /* DVS OFF */
+       ret |= pmic_reg_write(p, MAX8997_REG_BUCK1CTRL, val);
+
+       /* BUCK2 VINT: 1.1V */
+       val = (1100000 - 650000) / 25000;
+       ret |= pmic_reg_write(p, MAX8997_REG_BUCK2DVS1, val);
+       val = ENBUCK | ACTIVE_DISCHARGE;                /* DVS OFF */
+       ret |= pmic_reg_write(p, MAX8997_REG_BUCK2CTRL, val);
+
+
+       /* BUCK3 G3D: 1.1V - OFF */
+       ret |= pmic_reg_read(p, MAX8997_REG_BUCK3CTRL, &val);
+       val &= ~ENBUCK;
+       ret |= pmic_reg_write(p, MAX8997_REG_BUCK3CTRL, val);
+
+       val = (1100000 - 750000) / 50000;
+       ret |= pmic_reg_write(p, MAX8997_REG_BUCK3DVS, val);
+
+       /* BUCK4 CAMISP: 1.2V - OFF */
+       ret |= pmic_reg_read(p, MAX8997_REG_BUCK4CTRL, &val);
+       val &= ~ENBUCK;
+       ret |= pmic_reg_write(p, MAX8997_REG_BUCK4CTRL, val);
+
+       val = (1200000 - 650000) / 25000;
+       ret |= pmic_reg_write(p, MAX8997_REG_BUCK4DVS, val);
+
+       /* BUCK5 VMEM: 1.2V */
+       val = (1200000 - 650000) / 25000;
+       for (i = 0; i < 8; i++)
+               ret |= pmic_reg_write(p, MAX8997_REG_BUCK5DVS1 + i, val);
+
+       val = ENBUCK | ACTIVE_DISCHARGE;                /* DVS OFF */
+       ret |= pmic_reg_write(p, MAX8997_REG_BUCK5CTRL, val);
+
+       /* BUCK6 CAM AF: 2.8V */
+       /* No Voltage Setting Register */
+       /* GNSLCT 3.0X */
+       val = GNSLCT;
+       ret |= pmic_reg_write(p, MAX8997_REG_BUCK6CTRL, val);
+
+       /* BUCK7 VCC_SUB: 2.0V */
+       val = (2000000 - 750000) / 50000;
+       ret |= pmic_reg_write(p, MAX8997_REG_BUCK7DVS, val);
+
+       /* LDO1 VADC: 3.3V */
+       val = max8997_reg_ldo(3300000) | DIS_LDO;       /* OFF */
+       ret |= pmic_reg_write(p, MAX8997_REG_LDO1CTRL, val);
+
+       /* LDO1 Disable active discharging */
+       ret |= pmic_reg_read(p, MAX8997_REG_LDO1CONFIG, &val);
+       val &= ~LDO_ADE;
+       ret |= pmic_reg_write(p, MAX8997_REG_LDO1CONFIG, val);
+
+       /* LDO2 VALIVE: 1.1V */
+       val = max8997_reg_ldo(1100000) | EN_LDO;
+       ret |= pmic_reg_write(p, MAX8997_REG_LDO2CTRL, val);
+
+       /* LDO3 VUSB/MIPI: 1.1V */
+       val = max8997_reg_ldo(1100000) | DIS_LDO;       /* OFF */
+       ret |= pmic_reg_write(p, MAX8997_REG_LDO3CTRL, val);
+
+       /* LDO4 VMIPI: 1.8V */
+       val = max8997_reg_ldo(1800000) | DIS_LDO;       /* OFF */
+       ret |= pmic_reg_write(p, MAX8997_REG_LDO4CTRL, val);
+
+       /* LDO5 VHSIC: 1.2V */
+       val = max8997_reg_ldo(1200000) | DIS_LDO;       /* OFF */
+       ret |= pmic_reg_write(p, MAX8997_REG_LDO5CTRL, val);
+
+       /* LDO6 VCC_1.8V_PDA: 1.8V */
+       val = max8997_reg_ldo(1800000) | EN_LDO;
+       ret |= pmic_reg_write(p, MAX8997_REG_LDO6CTRL, val);
+
+       /* LDO7 CAM_ISP: 1.8V */
+       val = max8997_reg_ldo(1800000) | DIS_LDO;       /* OFF */
+       ret |= pmic_reg_write(p, MAX8997_REG_LDO7CTRL, val);
+
+       /* LDO8 VDAC/VUSB: 3.3V */
+       val = max8997_reg_ldo(3300000) | DIS_LDO;       /* OFF */
+       ret |= pmic_reg_write(p, MAX8997_REG_LDO8CTRL, val);
+
+       /* LDO9 VCC_2.8V_PDA: 2.8V */
+       val = max8997_reg_ldo(2800000) | EN_LDO;
+       ret |= pmic_reg_write(p, MAX8997_REG_LDO9CTRL, val);
+
+       /* LDO10 VPLL: 1.1V */
+       val = max8997_reg_ldo(1100000) | EN_LDO;
+       ret |= pmic_reg_write(p, MAX8997_REG_LDO10CTRL, val);
+
+       /* LDO11 TOUCH: 2.8V */
+       val = max8997_reg_ldo(2800000) | DIS_LDO;       /* OFF */
+       ret |= pmic_reg_write(p, MAX8997_REG_LDO11CTRL, val);
+
+       /* LDO12 VTCAM: 1.8V */
+       val = max8997_reg_ldo(1800000) | DIS_LDO;       /* OFF */
+       ret |= pmic_reg_write(p, MAX8997_REG_LDO12CTRL, val);
+
+       /* LDO13 VCC_3.0_LCD: 3.0V */
+       val = max8997_reg_ldo(3000000) | DIS_LDO;       /* OFF */
+       ret |= pmic_reg_write(p, MAX8997_REG_LDO13CTRL, val);
+
+       /* LDO14 MOTOR: 3.0V */
+       val = max8997_reg_ldo(3000000) | DIS_LDO;       /* OFF */
+       ret |= pmic_reg_write(p, MAX8997_REG_LDO14CTRL, val);
+
+       /* LDO15 LED_A: 2.8V */
+       val = max8997_reg_ldo(2800000) | DIS_LDO;       /* OFF */
+       ret |= pmic_reg_write(p, MAX8997_REG_LDO15CTRL, val);
+
+       /* LDO16 CAM_SENSOR: 1.8V */
+       val = max8997_reg_ldo(1800000) | DIS_LDO;       /* OFF */
+       ret |= pmic_reg_write(p, MAX8997_REG_LDO16CTRL, val);
+
+       /* LDO17 VTF: 2.8V */
+       val = max8997_reg_ldo(2800000) | DIS_LDO;       /* OFF */
+       ret |= pmic_reg_write(p, MAX8997_REG_LDO17CTRL, val);
+
+       /* LDO18 TOUCH_LED 3.3V */
+       val = max8997_reg_ldo(3300000) | DIS_LDO;       /* OFF */
+       ret |= pmic_reg_write(p, MAX8997_REG_LDO18CTRL, val);
+
+       /* LDO21 VDDQ: 1.2V */
+       val = max8997_reg_ldo(1200000) | EN_LDO;
+       ret |= pmic_reg_write(p, MAX8997_REG_LDO21CTRL, val);
+
+       /* SAFEOUT for both 1 and 2: 4.9V, Active discharge, Enable */
+       val = (SAFEOUT_4_90V << 0) | (SAFEOUT_4_90V << 2) |
+               ACTDISSAFEO1 | ACTDISSAFEO2 | ENSAFEOUT1 | ENSAFEOUT2;
+       ret |= pmic_reg_write(p, MAX8997_REG_SAFEOUTCTRL, val);
+
+       if (ret) {
+               puts("MAX8997 PMIC setting error!\n");
+               return -1;
+       }
+       return 0;
+}
+
+int power_init_board(void)
+{
+       int chrg, ret;
+       struct power_battery *pb;
+       struct pmic *p_fg, *p_chrg, *p_muic, *p_bat;
+
+       ret = pmic_init(I2C_5);
+       ret |= pmic_init_max8997();
+       ret |= power_fg_init(I2C_9);
+       ret |= power_muic_init(I2C_5);
+       ret |= power_bat_init(0);
+       if (ret)
+               return ret;
+
+       p_fg = pmic_get("MAX17042_FG");
+       if (!p_fg) {
+               puts("MAX17042_FG: Not found\n");
+               return -ENODEV;
+       }
+
+       p_chrg = pmic_get("MAX8997_PMIC");
+       if (!p_chrg) {
+               puts("MAX8997_PMIC: Not found\n");
+               return -ENODEV;
+       }
+
+       p_muic = pmic_get("MAX8997_MUIC");
+       if (!p_muic) {
+               puts("MAX8997_MUIC: Not found\n");
+               return -ENODEV;
+       }
+
+       p_bat = pmic_get("BAT_TRATS");
+       if (!p_bat) {
+               puts("BAT_TRATS: Not found\n");
+               return -ENODEV;
+       }
+
+       p_fg->parent =  p_bat;
+       p_chrg->parent = p_bat;
+       p_muic->parent = p_bat;
+
+       p_bat->low_power_mode = trats_low_power_mode;
+       p_bat->pbat->battery_init(p_bat, p_fg, p_chrg, p_muic);
+
+       pb = p_bat->pbat;
+       chrg = p_muic->chrg->chrg_type(p_muic);
+       debug("CHARGER TYPE: %d\n", chrg);
+
+       if (!p_chrg->chrg->chrg_bat_present(p_chrg)) {
+               puts("No battery detected\n");
+               return -1;
+       }
+
+       p_fg->fg->fg_battery_check(p_fg, p_bat);
+
+       if (pb->bat->state == CHARGE && chrg == CHARGER_USB)
+               puts("CHARGE Battery !\n");
+
+       return 0;
+}
+
 int dram_init(void)
 {
        gd->ram_size = get_ram_size((long *)PHYS_SDRAM_1, PHYS_SDRAM_1_SIZE) +
@@ -238,7 +506,9 @@ static int s5pc210_phy_control(int on)
 {
        int ret = 0;
        u32 val = 0;
-       struct pmic *p = get_pmic();
+       struct pmic *p = pmic_get("MAX8997_PMIC");
+       if (!p)
+               return -ENODEV;
 
        if (pmic_probe(p))
                return -1;
@@ -413,7 +683,9 @@ static void lcd_reset(void)
 static int lcd_power(void)
 {
        int ret = 0;
-       struct pmic *p = get_pmic();
+       struct pmic *p = pmic_get("MAX8997_PMIC");
+       if (!p)
+               return -ENODEV;
 
        if (pmic_probe(p))
                return 0;
@@ -473,7 +745,9 @@ static struct mipi_dsim_lcd_device mipi_lcd_device = {
 static int mipi_power(void)
 {
        int ret = 0;
-       struct pmic *p = get_pmic();
+       struct pmic *p = pmic_get("MAX8997_PMIC");
+       if (!p)
+               return -ENODEV;
 
        if (pmic_probe(p))
                return 0;
index 90fff5cf5e181af64cfd56b53937d64daac916bd..36a047217c57cbdac1b07196fbb137bf0eb7f2d1 100644 (file)
 #include <asm/arch/adc.h>
 #include <asm/arch/gpio.h>
 #include <asm/arch/mmc.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <usb/s3c_udc.h>
 #include <asm/arch/cpu.h>
-#include <max8998_pmic.h>
+#include <power/max8998_pmic.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -58,16 +58,23 @@ int board_init(void)
        gd->bd->bi_arch_number = MACH_TYPE_UNIVERSAL_C210;
        gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;
 
-#if defined(CONFIG_PMIC)
-       pmic_init();
-#endif
-
        check_hw_revision();
        printf("HW Revision:\t0x%x\n", board_rev);
 
        return 0;
 }
 
+int power_init_board(void)
+{
+       int ret;
+
+       ret = pmic_init(I2C_5);
+       if (ret)
+               return ret;
+
+       return 0;
+}
+
 int dram_init(void)
 {
        gd->ram_size = get_ram_size((long *)PHYS_SDRAM_1, PHYS_SDRAM_1_SIZE) +
@@ -112,7 +119,9 @@ static unsigned short get_adc_value(int channel)
 static int adc_power_control(int on)
 {
        int ret;
-       struct pmic *p = get_pmic();
+       struct pmic *p = pmic_get("MAX8998_PMIC");
+       if (!p)
+               return -ENODEV;
 
        if (pmic_probe(p))
                return -1;
@@ -280,7 +289,9 @@ int board_mmc_init(bd_t *bis)
 static int s5pc210_phy_control(int on)
 {
        int ret = 0;
-       struct pmic *p = get_pmic();
+       struct pmic *p = pmic_get("MAX8998_PMIC");
+       if (!p)
+               return -ENODEV;
 
        if (pmic_probe(p))
                return -1;
index abdd1aac2b5dd9bda98fb0a664506b4e6ed54d68..a471fec23dd791d2198495a4a3a5aff4afc3f57a 100644 (file)
@@ -34,7 +34,7 @@
 #include <asm/arch/sys_proto.h>
 #include <i2c.h>
 #include <mmc.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <fsl_esdhc.h>
 #include <fsl_pmic.h>
 #include <mc13892.h>
@@ -306,9 +306,15 @@ static void power_init_mx51(void)
 {
        unsigned int val;
        struct pmic *p;
+       int ret;
+
+       ret = pmic_init(I2C_PMIC);
+       if (ret)
+               return;
 
-       pmic_init();
-       p = get_pmic();
+       p = pmic_get("FSL_PMIC");
+       if (!p)
+               return;
 
        /* Write needed to Power Gate 2 register */
        pmic_reg_read(p, REG_POWER_MISC, &val);
index 4dd989383c28af863d2ebcb876fc13553931c6c4..7ae663c7d9611d3837aa970e1d341a6638d6cd3f 100644 (file)
@@ -372,7 +372,7 @@ M5235EVB                     m68k        mcf523x     m5235evb            freesca
 M5235EVB_Flash32             m68k        mcf523x     m5235evb            freescale      -           M5235EVB:NORFLASH_PS32BIT,SYS_TEXT_BASE=0xFFC00000
 cobra5272                    m68k        mcf52x2     cobra5272           -
 idmr                         m68k        mcf52x2
-eb_cpu5282                   m68k        mcf52x2     eb_cpu5282          BuS            -           eb_cpu5282:SYS_TEXT_BASE=0xFFE00000
+eb_cpu5282                   m68k        mcf52x2     eb_cpu5282          BuS            -           eb_cpu5282:SYS_TEXT_BASE=0xFF000000
 eb_cpu5282_internal          m68k        mcf52x2     eb_cpu5282          BuS            -           eb_cpu5282:SYS_TEXT_BASE=0xF0000000
 TASREG                       m68k        mcf52x2     tasreg              esd
 M5208EVBE                    m68k        mcf52x2     m5208evbe           freescale
index 62a1c224d36329a126425819de847acde8d24fa0..4c19df727a98bf2d29ea63530f8b207b6f1bff7d 100644 (file)
@@ -144,7 +144,7 @@ static int do_mmcinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 U_BOOT_CMD(
        mmcinfo, 1, 0, do_mmcinfo,
        "display MMC info",
-       "- dislay info of the current MMC device"
+       "- display info of the current MMC device"
 );
 
 static int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
index f51df26bf9fbde273211f645ed7a8aead7045dae..50c84292c166ef1fa5487997ce04298ae4fe834e 100644 (file)
@@ -40,15 +40,8 @@ int _do_help (cmd_tbl_t *cmd_start, int cmd_items, cmd_tbl_t * cmdtp, int
        int i;
        int rcode = 0;
 
-       if (cmd_items > CONFIG_SYS_MAXARGS) {
-               printf("%s: cmd_items %d exceeds hardcoded limit %d."
-                      " Recompile with higher CONFIG_SYS_MAXARGS?\n",
-                      __func__, cmd_items, CONFIG_SYS_MAXARGS);
-               return -1;
-       }
-
        if (argc == 1) {        /*show list of commands */
-               cmd_tbl_t *cmd_array[CONFIG_SYS_MAXARGS];
+               cmd_tbl_t *cmd_array[cmd_items];
                int i, j, swaps;
 
                /* Make array of commands from .uboot_cmd section */
index 271463cf142b25c1096cb46dbbb5a7b5fa338abb..cdec88b8fb999b8eccb1d0fbfc5fed27610d0bda 100644 (file)
@@ -34,13 +34,6 @@ COBJS-$(CONFIG_NS87308) += ns87308.o
 COBJS-$(CONFIG_PDSP188x) += pdsp188x.o
 COBJS-$(CONFIG_STATUS_LED) += status_led.o
 COBJS-$(CONFIG_TWL4030_LED) += twl4030_led.o
-COBJS-$(CONFIG_PMIC) += pmic_core.o
-COBJS-$(CONFIG_DIALOG_PMIC) += pmic_dialog.o
-COBJS-$(CONFIG_PMIC_FSL) += pmic_fsl.o
-COBJS-$(CONFIG_PMIC_I2C) += pmic_i2c.o
-COBJS-$(CONFIG_PMIC_SPI) += pmic_spi.o
-COBJS-$(CONFIG_PMIC_MAX8998) += pmic_max8998.o
-COBJS-$(CONFIG_PMIC_MAX8997) += pmic_max8997.o
 
 COBJS  := $(COBJS-y)
 SRCS   := $(COBJS:.o=.c)
diff --git a/drivers/misc/pmic_core.c b/drivers/misc/pmic_core.c
deleted file mode 100644 (file)
index 5d62a56..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright (C) 2011 Samsung Electronics
- * Lukasz Majewski <l.majewski@samsung.com>
- *
- * (C) Copyright 2010
- * Stefano Babic, DENX Software Engineering, sbabic@denx.de
- *
- * (C) Copyright 2008-2009 Freescale Semiconductor, Inc.
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include <common.h>
-#include <linux/types.h>
-#include <pmic.h>
-
-static struct pmic pmic;
-
-int check_reg(u32 reg)
-{
-       if (reg >= pmic.number_of_regs) {
-               printf("<reg num> = %d is invalid. Should be less than %d\n",
-                      reg, pmic.number_of_regs);
-               return -1;
-       }
-       return 0;
-}
-
-int pmic_set_output(struct pmic *p, u32 reg, int out, int on)
-{
-       u32 val;
-
-       if (pmic_reg_read(p, reg, &val))
-               return -1;
-
-       if (on)
-               val |= out;
-       else
-               val &= ~out;
-
-       if (pmic_reg_write(p, reg, val))
-               return -1;
-
-       return 0;
-}
-
-static void pmic_show_info(struct pmic *p)
-{
-       printf("PMIC: %s\n", p->name);
-}
-
-static void pmic_dump(struct pmic *p)
-{
-       int i, ret;
-       u32 val;
-
-       pmic_show_info(p);
-       for (i = 0; i < p->number_of_regs; i++) {
-               ret = pmic_reg_read(p, i, &val);
-               if (ret)
-                       puts("PMIC: Registers dump failed\n");
-
-               if (!(i % 8))
-                       printf("\n0x%02x: ", i);
-
-               printf("%08x ", val);
-       }
-       puts("\n");
-}
-
-struct pmic *get_pmic(void)
-{
-       return &pmic;
-}
-
-int do_pmic(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
-       u32 ret, reg, val;
-       char *cmd;
-
-       struct pmic *p = &pmic;
-
-       /* at least two arguments please */
-       if (argc < 2)
-               return cmd_usage(cmdtp);
-
-       cmd = argv[1];
-       if (strcmp(cmd, "dump") == 0) {
-               pmic_dump(p);
-               return 0;
-       }
-
-       if (strcmp(cmd, "read") == 0) {
-               if (argc < 3)
-                       return cmd_usage(cmdtp);
-
-               reg = simple_strtoul(argv[2], NULL, 16);
-
-               ret = pmic_reg_read(p, reg, &val);
-
-               if (ret)
-                       puts("PMIC: Register read failed\n");
-
-               printf("\n0x%02x: 0x%08x\n", reg, val);
-
-               return 0;
-       }
-
-       if (strcmp(cmd, "write") == 0) {
-               if (argc < 4)
-                       return cmd_usage(cmdtp);
-
-               reg = simple_strtoul(argv[2], NULL, 16);
-               val = simple_strtoul(argv[3], NULL, 16);
-
-               pmic_reg_write(p, reg, val);
-
-               return 0;
-       }
-
-       /* No subcommand found */
-       return 1;
-}
-
-U_BOOT_CMD(
-       pmic,   CONFIG_SYS_MAXARGS, 1, do_pmic,
-       "PMIC",
-       "dump - dump PMIC registers\n"
-       "pmic read <reg> - read register\n"
-       "pmic write <reg> <value> - write register"
-);
index 6bf388cb7d59036fd2922eb51dd89d09328af05d..8c7190156c302b60b9f5b8601bc7e4e7a0594b73 100644 (file)
@@ -23,7 +23,7 @@
 
 include $(TOPDIR)/config.mk
 
-LIB    := $(obj)libpower.o
+LIB    := $(obj)libpower.o
 
 COBJS-$(CONFIG_FTPMU010_POWER) += ftpmu010.o
 COBJS-$(CONFIG_TPS6586X_POWER) += tps6586x.o
@@ -31,9 +31,15 @@ COBJS-$(CONFIG_TWL4030_POWER)        += twl4030.o
 COBJS-$(CONFIG_TWL6030_POWER)  += twl6030.o
 COBJS-$(CONFIG_TWL6035_POWER)  += twl6035.o
 
+COBJS-$(CONFIG_POWER) += power_core.o
+COBJS-$(CONFIG_DIALOG_POWER) += power_dialog.o
+COBJS-$(CONFIG_POWER_FSL) += power_fsl.o
+COBJS-$(CONFIG_POWER_I2C) += power_i2c.o
+COBJS-$(CONFIG_POWER_SPI) += power_spi.o
+
 COBJS  := $(COBJS-y)
-SRCS   := $(COBJS:.o=.c)
-OBJS   := $(addprefix $(obj),$(COBJS))
+SRCS   := $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS))
 
 all:   $(LIB)
 
similarity index 52%
rename from board/BuS/eb_cpu5282/config.mk
rename to drivers/power/battery/Makefile
index 18fb84eb3b590f7b3edc91fbbb6734a848f3e80a..b176701234b36d0e39b4d157d840a2afdcb16f3d 100644 (file)
@@ -1,7 +1,6 @@
 #
-# (C) Copyright 2000-2003
-# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
-# Coldfire contribution by Bernhard Kuhn <bkuhn@metrowerks.com>
+# Copyright (C) 2012 Samsung Electronics
+# Lukasz Majewski <l.majewski@samsung.com>
 #
 # See file CREDITS for list of people who contributed to this
 # project.
@@ -13,7 +12,7 @@
 #
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
 # MA 02111-1307 USA
 #
 
-ifndef CONFIG_SYS_TEXT_BASE
-CONFIG_SYS_TEXT_BASE = 0xFE000000
-endif
+include $(TOPDIR)/config.mk
+
+LIB    := $(obj)libbattery.o
+
+COBJS-$(CONFIG_POWER_BATTERY_TRATS) += bat_trats.o
+
+COBJS  := $(COBJS-y)
+SRCS   := $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS))
+
+all:   $(LIB)
+
+$(LIB):        $(obj).depend $(OBJS)
+       $(call cmd_link_o_target, $(OBJS))
+
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+########################################################################
diff --git a/drivers/power/battery/bat_trats.c b/drivers/power/battery/bat_trats.c
new file mode 100644 (file)
index 0000000..ca0d214
--- /dev/null
@@ -0,0 +1,100 @@
+/*
+ *  Copyright (C) 2012 Samsung Electronics
+ *  Lukasz Majewski <l.majewski@samsung.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <power/pmic.h>
+#include <power/battery.h>
+#include <power/max8997_pmic.h>
+#include <errno.h>
+
+static struct battery battery_trats;
+
+static int power_battery_charge(struct pmic *bat)
+{
+       struct power_battery *p_bat = bat->pbat;
+       struct battery *battery = p_bat->bat;
+       int k;
+
+       if (bat->chrg->chrg_state(p_bat->chrg, CHARGER_ENABLE, 450))
+               return -1;
+
+       for (k = 0; bat->chrg->chrg_bat_present(p_bat->chrg) &&
+                    bat->chrg->chrg_type(p_bat->muic) &&
+                    battery->state_of_chrg < 100; k++) {
+               udelay(10000000);
+               puts(".");
+               bat->fg->fg_battery_update(p_bat->fg, bat);
+
+               if (k == 100) {
+                       debug(" %d [V]", battery->voltage_uV);
+                       puts("\n");
+                       k = 0;
+               }
+
+       }
+
+       bat->chrg->chrg_state(p_bat->chrg, CHARGER_DISABLE, 0);
+
+       return 0;
+}
+
+static int power_battery_init_trats(struct pmic *bat_,
+                                   struct pmic *fg_,
+                                   struct pmic *chrg_,
+                                   struct pmic *muic_)
+{
+       bat_->pbat->fg = fg_;
+       bat_->pbat->chrg = chrg_;
+       bat_->pbat->muic = muic_;
+
+       bat_->fg = fg_->fg;
+       bat_->chrg = chrg_->chrg;
+       bat_->chrg->chrg_type = muic_->chrg->chrg_type;
+       return 0;
+}
+
+static struct power_battery power_bat_trats = {
+       .bat = &battery_trats,
+       .battery_init = power_battery_init_trats,
+       .battery_charge = power_battery_charge,
+};
+
+int power_bat_init(unsigned char bus)
+{
+       static const char name[] = "BAT_TRATS";
+       struct pmic *p = pmic_alloc();
+
+       if (!p) {
+               printf("%s: POWER allocation error!\n", __func__);
+               return -ENOMEM;
+       }
+
+       debug("Board BAT init\n");
+
+       p->interface = PMIC_NONE;
+       p->name = name;
+       p->bus = bus;
+
+       p->pbat = &power_bat_trats;
+       return 0;
+}
diff --git a/drivers/power/fuel_gauge/Makefile b/drivers/power/fuel_gauge/Makefile
new file mode 100644 (file)
index 0000000..da15414
--- /dev/null
@@ -0,0 +1,47 @@
+#
+# Copyright (C) 2012 Samsung Electronics
+# Lukasz Majewski <l.majewski@samsung.com>
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    := $(obj)libfuel_gauge.o
+
+COBJS-$(CONFIG_POWER_FG_MAX17042) += fg_max17042.o
+
+COBJS  := $(COBJS-y)
+SRCS   := $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS))
+
+all:   $(LIB)
+
+$(LIB):        $(obj).depend $(OBJS)
+       $(call cmd_link_o_target, $(OBJS))
+
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+########################################################################
diff --git a/drivers/power/fuel_gauge/fg_max17042.c b/drivers/power/fuel_gauge/fg_max17042.c
new file mode 100644 (file)
index 0000000..9b7c184
--- /dev/null
@@ -0,0 +1,250 @@
+/*
+ *  Copyright (C) 2012 Samsung Electronics
+ *  Lukasz Majewski <l.majewski@samsung.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <power/pmic.h>
+#include <power/max17042_fg.h>
+#include <i2c.h>
+#include <power/max8997_pmic.h>
+#include <power/power_chrg.h>
+#include <power/battery.h>
+#include <power/fg_battery_cell_params.h>
+#include <errno.h>
+
+static int fg_write_regs(struct pmic *p, u8 addr, u16 *data, int num)
+{
+       int ret = 0;
+       int i;
+
+       for (i = 0; i < num; i++, addr++)
+               ret |= pmic_reg_write(p, addr, *(data + i));
+
+       return ret;
+}
+
+static int fg_read_regs(struct pmic *p, u8 addr, u16 *data, int num)
+{
+       int ret = 0;
+       int i;
+
+       for (i = 0; i < num; i++, addr++)
+               ret |= pmic_reg_read(p, addr, (u32 *) (data + i));
+
+       return ret;
+}
+
+static int fg_write_and_verify(struct pmic *p, u8 addr, u16 data)
+{
+       unsigned int val = data;
+       int ret = 0;
+
+       ret |= pmic_reg_write(p, addr, val);
+       ret |= pmic_reg_read(p, addr, &val);
+
+       if (ret)
+               return ret;
+
+       if (((u16) val) == data)
+               return 0;
+
+       return -1;
+}
+
+static void por_fuelgauge_init(struct pmic *p)
+{
+       u16 r_data0[16], r_data1[16], r_data2[16];
+       u32 rewrite_count = 5, i = 0;
+       unsigned int val;
+       int ret = 0;
+
+       /* Delay 500 ms */
+       mdelay(500);
+       /* Initilize Configuration */
+       pmic_reg_write(p, MAX17042_CONFIG, 0x2310);
+
+rewrite_model:
+       /* Unlock Model Access */
+       pmic_reg_write(p, MAX17042_MLOCKReg1, MODEL_UNLOCK1);
+       pmic_reg_write(p, MAX17042_MLOCKReg2, MODEL_UNLOCK2);
+
+       /* Write/Read/Verify the Custom Model */
+       ret |= fg_write_regs(p, MAX17042_MODEL1, cell_character0,
+                            ARRAY_SIZE(cell_character0));
+       ret |= fg_write_regs(p, MAX17042_MODEL2, cell_character1,
+                            ARRAY_SIZE(cell_character1));
+       ret |= fg_write_regs(p, MAX17042_MODEL3, cell_character2,
+                            ARRAY_SIZE(cell_character2));
+
+       if (ret) {
+               printf("%s: Cell parameters write failed!\n", __func__);
+               return;
+       }
+
+       ret |= fg_read_regs(p, MAX17042_MODEL1, r_data0, ARRAY_SIZE(r_data0));
+       ret |= fg_read_regs(p, MAX17042_MODEL2, r_data1, ARRAY_SIZE(r_data1));
+       ret |= fg_read_regs(p, MAX17042_MODEL3, r_data2, ARRAY_SIZE(r_data2));
+
+       if (ret)
+               printf("%s: Cell parameters read failed!\n", __func__);
+
+       for (i = 0; i < 16; i++) {
+               if ((cell_character0[i] != r_data0[i])
+                   || (cell_character1[i] != r_data1[i])
+                   || (cell_character2[i] != r_data2[i]))
+                       goto rewrite_model;
+               }
+
+       /* Lock model access */
+       pmic_reg_write(p, MAX17042_MLOCKReg1, MODEL_LOCK1);
+       pmic_reg_write(p, MAX17042_MLOCKReg2, MODEL_LOCK2);
+
+       /* Verify the model access is locked */
+       ret |= fg_read_regs(p, MAX17042_MODEL1, r_data0, ARRAY_SIZE(r_data0));
+       ret |= fg_read_regs(p, MAX17042_MODEL2, r_data1, ARRAY_SIZE(r_data1));
+       ret |= fg_read_regs(p, MAX17042_MODEL3, r_data2, ARRAY_SIZE(r_data2));
+
+       if (ret) {
+               printf("%s: Cell parameters read failed!\n", __func__);
+               return;
+       }
+
+       for (i = 0; i < ARRAY_SIZE(r_data0); i++) {
+               /* Check if model locked */
+               if (r_data0[i] || r_data1[i] || r_data2[i]) {
+                       /* Rewrite model data - prevent from endless loop */
+                       if (rewrite_count--) {
+                               puts("FG - Lock model access failed!\n");
+                               goto rewrite_model;
+                       }
+               }
+       }
+
+       /* Write Custom Parameters */
+       fg_write_and_verify(p, MAX17042_RCOMP0, RCOMP0);
+       fg_write_and_verify(p, MAX17042_TEMPCO, TempCo);
+
+       /* Delay at least 350mS */
+       mdelay(350);
+
+       /* Initialization Complete */
+       pmic_reg_read(p, MAX17042_STATUS, &val);
+       /* Write and Verify Status with POR bit Cleared */
+       fg_write_and_verify(p, MAX17042_STATUS, val & ~MAX17042_POR);
+
+       /* Delay at least 350 ms */
+       mdelay(350);
+}
+
+static int power_update_battery(struct pmic *p, struct pmic *bat)
+{
+       struct power_battery *pb = bat->pbat;
+       unsigned int val;
+       int ret = 0;
+
+       if (pmic_probe(p)) {
+               puts("Can't find max17042 fuel gauge\n");
+               return -1;
+       }
+
+       ret |= pmic_reg_read(p, MAX17042_VFSOC, &val);
+       pb->bat->state_of_chrg = (val >> 8);
+
+       pmic_reg_read(p, MAX17042_VCELL, &val);
+       debug("vfsoc: 0x%x\n", val);
+       pb->bat->voltage_uV = ((val & 0xFFUL) >> 3) + ((val & 0xFF00) >> 3);
+       pb->bat->voltage_uV = (pb->bat->voltage_uV * 625);
+
+       pmic_reg_read(p, 0x05, &val);
+       pb->bat->capacity = val >> 2;
+
+       return ret;
+}
+
+static int power_check_battery(struct pmic *p, struct pmic *bat)
+{
+       struct power_battery *pb = bat->pbat;
+       unsigned int val;
+       int ret = 0;
+
+       if (pmic_probe(p)) {
+               puts("Can't find max17042 fuel gauge\n");
+               return -1;
+       }
+
+       ret |= pmic_reg_read(p, MAX17042_STATUS, &val);
+       debug("fg status: 0x%x\n", val);
+
+       if (val == MAX17042_POR)
+               por_fuelgauge_init(p);
+
+       ret |= pmic_reg_read(p, MAX17042_VERSION, &val);
+       pb->bat->version = val;
+
+       power_update_battery(p, bat);
+       debug("fg ver: 0x%x\n", pb->bat->version);
+       printf("BAT: state_of_charge(SOC):%d%%\n",
+              pb->bat->state_of_chrg);
+
+       printf("     voltage: %d.%6.6d [V] (expected to be %d [mAh])\n",
+              pb->bat->voltage_uV / 1000000,
+              pb->bat->voltage_uV % 1000000,
+              pb->bat->capacity);
+
+       if (pb->bat->voltage_uV > 3850000)
+               pb->bat->state = EXT_SOURCE;
+       else if (pb->bat->voltage_uV < 3600000 || pb->bat->state_of_chrg < 5)
+               pb->bat->state = CHARGE;
+       else
+               pb->bat->state = NORMAL;
+
+       return ret;
+}
+
+static struct power_fg power_fg_ops = {
+       .fg_battery_check = power_check_battery,
+       .fg_battery_update = power_update_battery,
+};
+
+int power_fg_init(unsigned char bus)
+{
+       static const char name[] = "MAX17042_FG";
+       struct pmic *p = pmic_alloc();
+
+       if (!p) {
+               printf("%s: POWER allocation error!\n", __func__);
+               return -ENOMEM;
+       }
+
+       debug("Board Fuel Gauge init\n");
+
+       p->name = name;
+       p->interface = PMIC_I2C;
+       p->number_of_regs = FG_NUM_OF_REGS;
+       p->hw.i2c.addr = MAX17042_I2C_ADDR;
+       p->hw.i2c.tx_num = 2;
+       p->sensor_byte_order = PMIC_SENSOR_BYTE_ORDER_BIG;
+       p->bus = bus;
+
+       p->fg = &power_fg_ops;
+       return 0;
+}
diff --git a/drivers/power/pmic/Makefile b/drivers/power/pmic/Makefile
new file mode 100644 (file)
index 0000000..e19a9a8
--- /dev/null
@@ -0,0 +1,49 @@
+#
+# Copyright (C) 2012 Samsung Electronics
+# Lukasz Majewski <l.majewski@samsung.com>
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    := $(obj)libpmic.o
+
+COBJS-$(CONFIG_POWER_MAX8998) += pmic_max8998.o
+COBJS-$(CONFIG_POWER_MAX8997) += pmic_max8997.o
+COBJS-$(CONFIG_POWER_MUIC_MAX8997) += muic_max8997.o
+
+COBJS  := $(COBJS-y)
+SRCS   := $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS))
+
+all:   $(LIB)
+
+$(LIB):        $(obj).depend $(OBJS)
+       $(call cmd_link_o_target, $(OBJS))
+
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+########################################################################
diff --git a/drivers/power/pmic/muic_max8997.c b/drivers/power/pmic/muic_max8997.c
new file mode 100644 (file)
index 0000000..d5095c8
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ *  Copyright (C) 2012 Samsung Electronics
+ *  Lukasz Majewski <l.majewski@samsung.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <power/pmic.h>
+#include <power/power_chrg.h>
+#include <power/max8997_muic.h>
+#include <i2c.h>
+#include <errno.h>
+
+static int power_chrg_get_type(struct pmic *p)
+{
+       unsigned int val;
+       unsigned char charge_type, charger;
+
+       if (pmic_probe(p))
+               return CHARGER_NO;
+
+       pmic_reg_read(p, MAX8997_MUIC_STATUS2, &val);
+       charge_type = val & MAX8997_MUIC_CHG_MASK;
+
+       switch (charge_type) {
+       case MAX8997_MUIC_CHG_NO:
+               charger = CHARGER_NO;
+               break;
+       case MAX8997_MUIC_CHG_USB:
+       case MAX8997_MUIC_CHG_USB_D:
+               charger = CHARGER_USB;
+               break;
+       case MAX8997_MUIC_CHG_TA:
+       case MAX8997_MUIC_CHG_TA_1A:
+               charger = CHARGER_TA;
+               break;
+       case MAX8997_MUIC_CHG_TA_500:
+               charger = CHARGER_TA_500;
+               break;
+       default:
+               charger = CHARGER_UNKNOWN;
+               break;
+       }
+
+       return charger;
+}
+
+static struct power_chrg power_chrg_muic_ops = {
+       .chrg_type = power_chrg_get_type,
+};
+
+int power_muic_init(unsigned int bus)
+{
+       static const char name[] = "MAX8997_MUIC";
+       struct pmic *p = pmic_alloc();
+
+       if (!p) {
+               printf("%s: POWER allocation error!\n", __func__);
+               return -ENOMEM;
+       }
+
+       debug("Board Micro USB Interface Controller init\n");
+
+       p->name = name;
+       p->interface = PMIC_I2C;
+       p->number_of_regs = MUIC_NUM_OF_REGS;
+       p->hw.i2c.addr = MAX8997_MUIC_I2C_ADDR;
+       p->hw.i2c.tx_num = 1;
+       p->bus = bus;
+
+       p->chrg = &power_chrg_muic_ops;
+       return 0;
+}
diff --git a/drivers/power/pmic/pmic_max8997.c b/drivers/power/pmic/pmic_max8997.c
new file mode 100644 (file)
index 0000000..4e5c6d6
--- /dev/null
@@ -0,0 +1,123 @@
+/*
+ *  Copyright (C) 2012 Samsung Electronics
+ *  Lukasz Majewski <l.majewski@samsung.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <power/pmic.h>
+#include <power/max8997_pmic.h>
+#include <i2c.h>
+#include <errno.h>
+
+unsigned char max8997_reg_ldo(int uV)
+{
+       unsigned char ret;
+       if (uV <= 800000)
+               return 0;
+       if (uV >= 3950000)
+               return MAX8997_LDO_MAX_VAL;
+       ret = (uV - 800000) / 50000;
+       if (ret > MAX8997_LDO_MAX_VAL) {
+               printf("MAX8997 LDO SETTING ERROR (%duV) -> %u\n", uV, ret);
+               ret = MAX8997_LDO_MAX_VAL;
+       }
+
+       return ret;
+}
+
+static int pmic_charger_state(struct pmic *p, int state, int current)
+{
+       unsigned char fc;
+       u32 val = 0;
+
+       if (pmic_probe(p))
+               return -1;
+
+       if (state == CHARGER_DISABLE) {
+               puts("Disable the charger.\n");
+               pmic_reg_read(p, MAX8997_REG_MBCCTRL2, &val);
+               val &= ~(MBCHOSTEN | VCHGR_FC);
+               pmic_reg_write(p, MAX8997_REG_MBCCTRL2, val);
+
+               return -1;
+       }
+
+       if (current < CHARGER_MIN_CURRENT || current > CHARGER_MAX_CURRENT) {
+               printf("%s: Wrong charge current: %d [mA]\n",
+                      __func__, current);
+               return -1;
+       }
+
+       fc = (current - CHARGER_MIN_CURRENT) / CHARGER_CURRENT_RESOLUTION;
+       fc = fc & 0xf; /* up to 950 mA */
+
+       printf("Enable the charger @ %d [mA]\n", fc * CHARGER_CURRENT_RESOLUTION
+              + CHARGER_MIN_CURRENT);
+
+       val = fc | MBCICHFCSET;
+       pmic_reg_write(p, MAX8997_REG_MBCCTRL4, val);
+
+       pmic_reg_read(p, MAX8997_REG_MBCCTRL2, &val);
+       val = MBCHOSTEN | VCHGR_FC; /* enable charger & fast charge */
+       pmic_reg_write(p, MAX8997_REG_MBCCTRL2, val);
+
+       return 0;
+}
+
+static int pmic_charger_bat_present(struct pmic *p)
+{
+       u32 val;
+
+       if (pmic_probe(p))
+               return -1;
+
+       pmic_reg_read(p, MAX8997_REG_STATUS4, &val);
+
+       return !(val & DETBAT);
+}
+
+static struct power_chrg power_chrg_pmic_ops = {
+       .chrg_bat_present = pmic_charger_bat_present,
+       .chrg_state = pmic_charger_state,
+};
+
+int pmic_init(unsigned char bus)
+{
+       static const char name[] = "MAX8997_PMIC";
+       struct pmic *p = pmic_alloc();
+
+       if (!p) {
+               printf("%s: POWER allocation error!\n", __func__);
+               return -ENOMEM;
+       }
+
+       debug("Board PMIC init\n");
+
+       p->name = name;
+       p->interface = PMIC_I2C;
+       p->number_of_regs = PMIC_NUM_OF_REGS;
+       p->hw.i2c.addr = MAX8997_I2C_ADDR;
+       p->hw.i2c.tx_num = 1;
+       p->bus = bus;
+
+       p->chrg = &power_chrg_pmic_ops;
+       return 0;
+}
similarity index 82%
rename from drivers/misc/pmic_max8998.c
rename to drivers/power/pmic/pmic_max8998.c
index cc69fd708032f3ab423728f35e0a3a1c5c813f74..452e1c8d86279642a78182603c98935d33916523 100644 (file)
  */
 
 #include <common.h>
-#include <pmic.h>
-#include <max8998_pmic.h>
+#include <power/pmic.h>
+#include <power/max8998_pmic.h>
+#include <errno.h>
 
-int pmic_init(void)
+int pmic_init(unsigned char bus)
 {
-       struct pmic *p = get_pmic();
        static const char name[] = "MAX8998_PMIC";
+       struct pmic *p = pmic_alloc();
+
+       if (!p) {
+               printf("%s: POWER allocation error!\n", __func__);
+               return -ENOMEM;
+       }
 
        puts("Board PMIC init\n");
 
@@ -37,7 +43,7 @@ int pmic_init(void)
        p->number_of_regs = PMIC_NUM_OF_REGS;
        p->hw.i2c.addr = MAX8998_I2C_ADDR;
        p->hw.i2c.tx_num = 1;
-       p->bus = I2C_PMIC;
+       p->bus = bus;
 
        return 0;
 }
diff --git a/drivers/power/power_core.c b/drivers/power/power_core.c
new file mode 100644 (file)
index 0000000..90df2c5
--- /dev/null
@@ -0,0 +1,232 @@
+/*
+ * Copyright (C) 2011 Samsung Electronics
+ * Lukasz Majewski <l.majewski@samsung.com>
+ *
+ * (C) Copyright 2010
+ * Stefano Babic, DENX Software Engineering, sbabic@denx.de
+ *
+ * (C) Copyright 2008-2009 Freescale Semiconductor, Inc.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <malloc.h>
+#include <linux/types.h>
+#include <linux/list.h>
+#include <power/pmic.h>
+
+static LIST_HEAD(pmic_list);
+
+int check_reg(struct pmic *p, u32 reg)
+{
+       if (reg >= p->number_of_regs) {
+               printf("<reg num> = %d is invalid. Should be less than %d\n",
+                      reg, p->number_of_regs);
+               return -1;
+       }
+
+       return 0;
+}
+
+int pmic_set_output(struct pmic *p, u32 reg, int out, int on)
+{
+       u32 val;
+
+       if (pmic_reg_read(p, reg, &val))
+               return -1;
+
+       if (on)
+               val |= out;
+       else
+               val &= ~out;
+
+       if (pmic_reg_write(p, reg, val))
+               return -1;
+
+       return 0;
+}
+
+static void pmic_show_info(struct pmic *p)
+{
+       printf("PMIC: %s\n", p->name);
+}
+
+static int pmic_dump(struct pmic *p)
+{
+       int i, ret;
+       u32 val;
+
+       if (!p) {
+               puts("Wrong PMIC name!\n");
+               return -1;
+       }
+
+       pmic_show_info(p);
+       for (i = 0; i < p->number_of_regs; i++) {
+               ret = pmic_reg_read(p, i, &val);
+               if (ret)
+                       puts("PMIC: Registers dump failed\n");
+
+               if (!(i % 8))
+                       printf("\n0x%02x: ", i);
+
+               printf("%08x ", val);
+       }
+       puts("\n");
+       return 0;
+}
+
+struct pmic *pmic_alloc(void)
+{
+       struct pmic *p;
+
+       p = calloc(sizeof(*p), 1);
+       if (!p) {
+               printf("%s: No available memory for allocation!\n", __func__);
+               return NULL;
+       }
+
+       list_add_tail(&p->list, &pmic_list);
+
+       debug("%s: new pmic struct: 0x%p\n", __func__, p);
+
+       return p;
+}
+
+struct pmic *pmic_get(const char *s)
+{
+       struct pmic *p;
+
+       list_for_each_entry(p, &pmic_list, list) {
+               if (strcmp(p->name, s) == 0) {
+                       debug("%s: pmic %s -> 0x%p\n", __func__, p->name, p);
+                       return p;
+               }
+       }
+
+       return NULL;
+}
+
+const char *power_get_interface(int interface)
+{
+       const char *power_interface[] = {"I2C", "SPI", "|+|-|"};
+       return power_interface[interface];
+}
+
+static void pmic_list_names(void)
+{
+       struct pmic *p;
+
+       puts("PMIC devices:\n");
+       list_for_each_entry(p, &pmic_list, list) {
+               printf("name: %s bus: %s_%d\n", p->name,
+                      power_get_interface(p->interface), p->bus);
+       }
+}
+
+int do_pmic(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+       u32 ret, reg, val;
+       char *cmd, *name;
+       struct pmic *p;
+
+       /* at least two arguments please */
+       if (argc < 2)
+               return CMD_RET_USAGE;
+
+       if (strcmp(argv[1], "list") == 0) {
+               pmic_list_names();
+               return CMD_RET_SUCCESS;
+       }
+
+       name = argv[1];
+       cmd = argv[2];
+
+       debug("%s: name: %s cmd: %s\n", __func__, name, cmd);
+       p = pmic_get(name);
+       if (!p)
+               return CMD_RET_FAILURE;
+
+       if (strcmp(cmd, "dump") == 0) {
+               if (pmic_dump(p))
+                       return CMD_RET_FAILURE;
+               return CMD_RET_SUCCESS;
+       }
+
+       if (strcmp(cmd, "read") == 0) {
+               if (argc < 4)
+                       return CMD_RET_USAGE;
+
+               reg = simple_strtoul(argv[3], NULL, 16);
+               ret = pmic_reg_read(p, reg, &val);
+
+               if (ret)
+                       puts("PMIC: Register read failed\n");
+
+               printf("\n0x%02x: 0x%08x\n", reg, val);
+
+               return CMD_RET_SUCCESS;
+       }
+
+       if (strcmp(cmd, "write") == 0) {
+               if (argc < 5)
+                       return CMD_RET_USAGE;
+
+               reg = simple_strtoul(argv[3], NULL, 16);
+               val = simple_strtoul(argv[4], NULL, 16);
+               pmic_reg_write(p, reg, val);
+
+               return CMD_RET_SUCCESS;
+       }
+
+       if (strcmp(cmd, "bat") == 0) {
+               if (argc < 4)
+                       return CMD_RET_USAGE;
+
+               if (strcmp(argv[3], "state") == 0)
+                       p->fg->fg_battery_check(p->pbat->fg, p);
+
+               if (strcmp(argv[3], "charge") == 0) {
+                       if (p->pbat) {
+                               printf("PRINT BAT charge %s\n", p->name);
+                               if (p->low_power_mode)
+                                       p->low_power_mode();
+                               if (p->pbat->battery_charge)
+                                       p->pbat->battery_charge(p);
+                       }
+               }
+
+               return CMD_RET_SUCCESS;
+       }
+
+       /* No subcommand found */
+       return CMD_RET_SUCCESS;
+}
+
+U_BOOT_CMD(
+       pmic,   CONFIG_SYS_MAXARGS, 1, do_pmic,
+       "PMIC",
+       "list - list available PMICs\n"
+       "pmic name dump - dump named PMIC registers\n"
+       "pmic name read <reg> - read register\n"
+       "pmic name write <reg> <value> - write register\n"
+       "pmic name bat state - write register\n"
+       "pmic name bat charge - write register\n"
+);
similarity index 81%
rename from drivers/misc/pmic_dialog.c
rename to drivers/power/power_dialog.c
index e97af1d1d01a3020516f83fa7ef3b6ccee2ec9a2..d7ebd1583e8303495f4641e06d80cf4a83a91072 100644 (file)
  */
 
 #include <common.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <dialog_pmic.h>
+#include <errno.h>
 
-int pmic_dialog_init(void)
+int pmic_dialog_init(unsigned char bus)
 {
-       struct pmic *p = get_pmic();
        static const char name[] = "DIALOG_PMIC";
+       struct pmic *p = pmic_alloc();
+
+       if (!p) {
+               printf("%s: POWER allocation error!\n", __func__);
+               return -ENOMEM;
+       }
 
        p->name = name;
        p->number_of_regs = DIALOG_NUM_OF_REGS;
@@ -31,7 +37,7 @@ int pmic_dialog_init(void)
        p->interface = PMIC_I2C;
        p->hw.i2c.addr = CONFIG_SYS_DIALOG_PMIC_I2C_ADDR;
        p->hw.i2c.tx_num = 1;
-       p->bus = I2C_PMIC;
+       p->bus = bus;
 
        return 0;
 }
similarity index 81%
rename from drivers/misc/pmic_fsl.c
rename to drivers/power/power_fsl.c
index 0ff75ed76e506e6ffe249b15d2add731d1632a93..651f88f850a0690bc26f15693051ddfee31e16f2 100644 (file)
 
 #include <common.h>
 #include <spi.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <fsl_pmic.h>
+#include <errno.h>
 
-#if defined(CONFIG_PMIC_SPI)
+#if defined(CONFIG_POWER_SPI)
 static u32 pmic_spi_prepare_tx(u32 reg, u32 *val, u32 write)
 {
        return (write << 31) | (reg << 25) | (*val & 0x00FFFFFF);
 }
 #endif
 
-int pmic_init(void)
+int pmic_init(unsigned char bus)
 {
-       struct pmic *p = get_pmic();
        static const char name[] = "FSL_PMIC";
+       struct pmic *p = pmic_alloc();
+
+       if (!p) {
+               printf("%s: POWER allocation error!\n", __func__);
+               return -ENOMEM;
+       }
 
        p->name = name;
        p->number_of_regs = PMIC_NUM_OF_REGS;
 
-#if defined(CONFIG_PMIC_SPI)
+#if defined(CONFIG_POWER_SPI)
        p->interface = PMIC_SPI;
        p->bus = CONFIG_FSL_PMIC_BUS;
        p->hw.spi.cs = CONFIG_FSL_PMIC_CS;
@@ -50,13 +56,13 @@ int pmic_init(void)
        p->hw.spi.bitlen = CONFIG_FSL_PMIC_BITLEN;
        p->hw.spi.flags = SPI_XFER_BEGIN | SPI_XFER_END;
        p->hw.spi.prepare_tx = pmic_spi_prepare_tx;
-#elif defined(CONFIG_PMIC_I2C)
+#elif defined(CONFIG_POWER_I2C)
        p->interface = PMIC_I2C;
        p->hw.i2c.addr = CONFIG_SYS_FSL_PMIC_I2C_ADDR;
        p->hw.i2c.tx_num = 3;
-       p->bus = I2C_PMIC;
+       p->bus = bus;
 #else
-#error "You must select CONFIG_PMIC_SPI or CONFIG_PMIC_I2C"
+#error "You must select CONFIG_POWER_SPI or CONFIG_PMIC_I2C"
 #endif
 
        return 0;
similarity index 62%
rename from drivers/misc/pmic_i2c.c
rename to drivers/power/power_i2c.c
index 95a3365b9fc72a481ded1937d4293b1fb6cb4042..3e5a784cf539cc942dcf87b5ee0bfad487f49053 100644 (file)
 
 #include <common.h>
 #include <linux/types.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <i2c.h>
+#include <compiler.h>
 
 int pmic_reg_write(struct pmic *p, u32 reg, u32 val)
 {
        unsigned char buf[4] = { 0 };
 
-       if (check_reg(reg))
+       if (check_reg(p, reg))
                return -1;
 
        switch (pmic_i2c_tx_num) {
        case 3:
-               buf[0] = (val >> 16) & 0xff;
-               buf[1] = (val >> 8) & 0xff;
-               buf[2] = val & 0xff;
+               if (p->sensor_byte_order == PMIC_SENSOR_BYTE_ORDER_BIG) {
+                       buf[2] = (cpu_to_le32(val) >> 16) & 0xff;
+                       buf[1] = (cpu_to_le32(val) >> 8) & 0xff;
+                       buf[0] = cpu_to_le32(val) & 0xff;
+               } else {
+                       buf[0] = (cpu_to_le32(val) >> 16) & 0xff;
+                       buf[1] = (cpu_to_le32(val) >> 8) & 0xff;
+                       buf[2] = cpu_to_le32(val) & 0xff;
+               }
+               break;
+       case 2:
+               if (p->sensor_byte_order == PMIC_SENSOR_BYTE_ORDER_BIG) {
+                       buf[1] = (cpu_to_le32(val) >> 8) & 0xff;
+                       buf[0] = cpu_to_le32(val) & 0xff;
+               } else {
+                       buf[0] = (cpu_to_le32(val) >> 8) & 0xff;
+                       buf[1] = cpu_to_le32(val) & 0xff;
+               }
                break;
        case 1:
-               buf[0] = val & 0xff;
+               buf[0] = cpu_to_le32(val) & 0xff;
                break;
        default:
                printf("%s: invalid tx_num: %d", __func__, pmic_i2c_tx_num);
@@ -63,7 +79,7 @@ int pmic_reg_read(struct pmic *p, u32 reg, u32 *val)
        unsigned char buf[4] = { 0 };
        u32 ret_val = 0;
 
-       if (check_reg(reg))
+       if (check_reg(p, reg))
                return -1;
 
        if (i2c_read(pmic_i2c_addr, reg, 1, buf, pmic_i2c_tx_num))
@@ -71,10 +87,21 @@ int pmic_reg_read(struct pmic *p, u32 reg, u32 *val)
 
        switch (pmic_i2c_tx_num) {
        case 3:
-               ret_val = buf[0] << 16 | buf[1] << 8 | buf[2];
+               if (p->sensor_byte_order == PMIC_SENSOR_BYTE_ORDER_BIG)
+                       ret_val = le32_to_cpu(buf[2] << 16
+                                             | buf[1] << 8 | buf[0]);
+               else
+                       ret_val = le32_to_cpu(buf[0] << 16 |
+                                             buf[1] << 8 | buf[2]);
+               break;
+       case 2:
+               if (p->sensor_byte_order == PMIC_SENSOR_BYTE_ORDER_BIG)
+                       ret_val = le32_to_cpu(buf[1] << 8 | buf[0]);
+               else
+                       ret_val = le32_to_cpu(buf[0] << 8 | buf[1]);
                break;
        case 1:
-               ret_val = buf[0];
+               ret_val = le32_to_cpu(buf[0]);
                break;
        default:
                printf("%s: invalid tx_num: %d", __func__, pmic_i2c_tx_num);
@@ -88,7 +115,7 @@ int pmic_reg_read(struct pmic *p, u32 reg, u32 *val)
 int pmic_probe(struct pmic *p)
 {
        I2C_SET_BUS(p->bus);
-       debug("PMIC:%s probed!\n", p->name);
+       debug("Bus: %d PMIC:%s probed!\n", p->bus, p->name);
        if (i2c_probe(pmic_i2c_addr)) {
                printf("Can't find PMIC:%s\n", p->name);
                return -1;
similarity index 97%
rename from drivers/misc/pmic_spi.c
rename to drivers/power/power_spi.c
index 5a0dd22e29078c6a4b0b8e9fc7d2ad2867ece25e..27488ea5d929b6cd50c27b62b79396f0c8470cc1 100644 (file)
@@ -28,7 +28,7 @@
 
 #include <common.h>
 #include <linux/types.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <spi.h>
 
 static struct spi_slave *slave;
@@ -59,7 +59,7 @@ static u32 pmic_reg(struct pmic *p, u32 reg, u32 *val, u32 write)
                        return -1;
        }
 
-       if (check_reg(reg))
+       if (check_reg(p, reg))
                return -1;
 
        if (spi_claim_bus(slave))
index 70ea8a15898116a553d70d7150588331b859cf46..e79f4621d3f9e8157e5861b3382a91181031b4dc 100644 (file)
 #include <common.h>
 #include <rtc.h>
 #include <spi.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <fsl_pmic.h>
 
 int rtc_get(struct rtc_time *rtc)
 {
        u32 day1, day2, time;
        int tim, i = 0;
-       struct pmic *p = get_pmic();
+       struct pmic *p = pmic_get("FSL_PMIC");
        int ret;
 
+       if (!p)
+               return -1;
        do {
                ret = pmic_reg_read(p, REG_RTC_DAY, &day1);
                if (ret < 0)
@@ -61,7 +63,9 @@ int rtc_get(struct rtc_time *rtc)
 int rtc_set(struct rtc_time *rtc)
 {
        u32 time, day;
-       struct pmic *p = get_pmic();
+       struct pmic *p = pmic_get("FSL_PMIC");
+       if (!p)
+               return -1;
 
        time = mktime(rtc->tm_year, rtc->tm_mon, rtc->tm_mday,
                      rtc->tm_hour, rtc->tm_min, rtc->tm_sec);
diff --git a/fs/fs.c b/fs/fs.c
index ff360afd4b072a22fbe0ab7355206fc2d9e482a6..023e7ef16a3e86a12b48b416638bbcd972b84fc9 100644 (file)
--- a/fs/fs.c
+++ b/fs/fs.c
@@ -257,6 +257,7 @@ int do_load(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
        unsigned long pos;
        int len_read;
        char buf[12];
+       unsigned long time;
 
        if (argc < 2)
                return CMD_RET_USAGE;
@@ -293,11 +294,19 @@ int do_load(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
        else
                pos = 0;
 
+       time = get_timer(0);
        len_read = fs_read(filename, addr, pos, bytes);
+       time = get_timer(time);
        if (len_read <= 0)
                return 1;
 
-       printf("%d bytes read\n", len_read);
+       printf("%d bytes read in %lu ms", len_read, time);
+       if (time > 0) {
+               puts(" (");
+               print_size(len_read / time * 1000, "/s");
+               puts(")");
+       }
+       puts("\n");
 
        sprintf(buf, "0x%x", len_read);
        setenv("filesize", buf);
index 2db45b19286a081c030b3f43cad85920b38b81d7..1b73244c004732e3de0edbe717b650c3992e4908 100644 (file)
@@ -30,6 +30,7 @@
 #include <linux/ctype.h>
 #include <asm/byteorder.h>
 #include "zfs_common.h"
+#include "div64.h"
 
 block_dev_desc_t *zfs_dev_desc;
 
@@ -2115,7 +2116,8 @@ zfs_read(zfs_file_t file, char *buf, uint64_t len)
                /*
                 * Find requested blkid and the offset within that block.
                 */
-               uint64_t blkid = (file->offset + red) /  blksz;
+               uint64_t blkid = file->offset + red;
+               blkid = do_div(blkid, blksz);
                free(data->file_buf);
                data->file_buf = 0;
 
index 403fafa2f52b4cf2654549d17754c17d381a3dd2..aced85b6606e70c087b1d7571f1b50fb9b7b8c83 100644 (file)
  *----------------------------------------------------------------------*/
 #define CONFIG_SYS_LEDPIO_ADDR         0x02120870      /* LED PIO base addr    */
 #define CONFIG_STATUS_LED                      /* Enable status driver */
+#define CONFIG_BOARD_SPECIFIC_LED
 
 #define STATUS_LED_BIT         1               /* Bit-0 on PIO         */
 #define STATUS_LED_STATE       1               /* Blinking             */
index 9ecc10bd1b5866f46fbc513891886f5862665336..5a0d321f739de147b862aa3586832a48d175ac7c 100644 (file)
@@ -38,7 +38,7 @@
 
 #define CONFIG_MCFUART
 #define CONFIG_SYS_UART_PORT           (0)
-#define CONFIG_BAUDRATE 9600
+#define CONFIG_BAUDRATE                        115200
 
 #undef CONFIG_MONITOR_IS_IN_RAM                /* starts uboot direct */
 
 #define CONFIG_RESET_TO_RETRY
 #define CONFIG_SPLASH_SCREEN
 
+#define CONFIG_HW_WATCHDOG
+
+#define CONFIG_STATUS_LED
+#define CONFIG_BOARD_SPECIFIC_LED
+#define STATUS_LED_ACTIVE              0
+#define STATUS_LED_BIT                 0x0008  /* Timer7 GPIO */
+#define STATUS_LED_BOOT                        0
+#define STATUS_LED_PERIOD              (CONFIG_SYS_HZ / 2)
+#define STATUS_LED_STATE               STATUS_LED_OFF
+
 /*----------------------------------------------------------------------*
  * Configuration for environment                                       *
  * Environment is in the second sector of the first 256k of flash      *
  *----------------------------------------------------------------------*/
 
-#ifndef CONFIG_MONITOR_IS_IN_RAM
-#define CONFIG_ENV_ADDR                0xF003C000      /* End of 256K */
-#define CONFIG_ENV_SECT_SIZE   0x4000
-#define CONFIG_ENV_IS_IN_FLASH 1
-#else
-#define CONFIG_ENV_ADDR                0xFFE04000
-#define CONFIG_ENV_SECT_SIZE   0x2000
+#define CONFIG_ENV_ADDR                0xFF040000
+#define CONFIG_ENV_SECT_SIZE   0x00020000
 #define CONFIG_ENV_IS_IN_FLASH 1
-#endif
 
 /*
  * BOOTP options
 /*
  * Command line configuration.
  */
+#define CONFIG_CMDLINE_EDITING
 #include <config_cmd_default.h>
 
 #undef CONFIG_CMD_LOADB
+#define CONFIG_CMD_DATE
+#define CONFIG_CMD_DHCP
+#define CONFIG_CMD_I2C
+#define CONFIG_CMD_LED
 #define CONFIG_CMD_MII
 #define CONFIG_CMD_NET
 
 #define CONFIG_MCFTMR
 
-
 #define CONFIG_BOOTDELAY       5
-#define CONFIG_SYS_HUSH_PARSER
-#define CONFIG_SYS_PROMPT_HUSH_PS2     "> "
 #define CONFIG_SYS_PROMPT      "\nEB+CPU5282> "
 #define        CONFIG_SYS_LONGHELP     1
 
-#if defined(CONFIG_CMD_KGDB)
 #define        CONFIG_SYS_CBSIZE       1024    /* Console I/O Buffer Size      */
-#else
-#define        CONFIG_SYS_CBSIZE       256     /* Console I/O Buffer Size      */
-#endif
 #define        CONFIG_SYS_PBSIZE       (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16)
 #define        CONFIG_SYS_MAXARGS      16      /* max number of command args   */
 #define CONFIG_SYS_BARGSIZE    CONFIG_SYS_CBSIZE
 /*----------------------------------------------------------------------*
  * Clock and PLL Configuration                                         *
  *----------------------------------------------------------------------*/
-#define CONFIG_SYS_HZ                  10000000
-#define        CONFIG_SYS_CLK                  58982400       /* 9,8304MHz * 6 */
+#define CONFIG_SYS_HZ                  1000
+#define        CONFIG_SYS_CLK                  80000000      /* 8MHz * 8 */
 
-/* PLL Configuration: Ext Clock * 6 (see table 9-4 of MCF user manual) */
+/* PLL Configuration: Ext Clock * 8 (see table 9-4 of MCF user manual) */
 
-#define CONFIG_SYS_MFD         0x01    /* PLL Multiplication Factor Devider */
+#define CONFIG_SYS_MFD         0x02    /* PLL Multiplication Factor Devider */
 #define CONFIG_SYS_RFD         0x00    /* PLL Reduce Frecuency Devider */
 
 /*----------------------------------------------------------------------*
 #define CONFIG_SYS_FEC0_MIIBASE                CONFIG_SYS_FEC0_IOBASE
 #define MCFFEC_TOUT_LOOP               50000
 
-#define CONFIG_ETHADDR                 00:CF:52:82:EB:01
 #define CONFIG_OVERWRITE_ETHADDR_ONCE
 
 /*-------------------------------------------------------------------------
  *-----------------------------------------------------------------------*/
 
 #define CONFIG_SYS_INIT_RAM_ADDR       0x20000000
-#define CONFIG_SYS_INIT_RAM_SIZE               0x10000
+#define CONFIG_SYS_INIT_RAM_SIZE       0x10000
 #define CONFIG_SYS_GBL_DATA_OFFSET     \
        (CONFIG_SYS_INIT_RAM_SIZE - GENERATED_GBL_DATA_SIZE)
 #define CONFIG_SYS_INIT_SP_OFFSET      CONFIG_SYS_GBL_DATA_OFFSET
  * (Set up by the startup code)
  * Please note that CONFIG_SYS_SDRAM_BASE _must_ start at 0
  */
-#define CONFIG_SYS_SDRAM_BASE1         0x00000000
-#define        CONFIG_SYS_SDRAM_SIZE1          16      /* SDRAM size in MB */
-
-#define CONFIG_SYS_SDRAM_BASE          CONFIG_SYS_SDRAM_BASE1
-#define        CONFIG_SYS_SDRAM_SIZE           CONFIG_SYS_SDRAM_SIZE1
+#define CONFIG_SYS_SDRAM_BASE0         0x00000000
+#define        CONFIG_SYS_SDRAM_SIZE0          16      /* SDRAM size in MB */
 
+#define CONFIG_SYS_SDRAM_BASE          CONFIG_SYS_SDRAM_BASE0
+#define        CONFIG_SYS_SDRAM_SIZE           CONFIG_SYS_SDRAM_SIZE0
 
 /* If M5282 port is fully implemented the monitor base will be behind
  * the vector table. */
 /*-----------------------------------------------------------------------
  * FLASH organization
  */
+#define CONFIG_FLASH_SHOW_PROGRESS     45
 
 #define CONFIG_SYS_FLASH_BASE          CONFIG_SYS_CS0_BASE
 #define        CONFIG_SYS_INT_FLASH_BASE       0xF0000000
 #define CONFIG_SYS_INT_FLASH_ENABLE    0x21
 
-#define        CONFIG_SYS_MAX_FLASH_SECT       35
-#define        CONFIG_SYS_MAX_FLASH_BANKS      2
+#define        CONFIG_SYS_MAX_FLASH_SECT       128
+#define        CONFIG_SYS_MAX_FLASH_BANKS      1
 #define        CONFIG_SYS_FLASH_ERASE_TOUT     10000000
 #define        CONFIG_SYS_FLASH_PROTECTION
 
+#define CONFIG_SYS_FLASH_CFI
+#define CONFIG_FLASH_CFI_DRIVER
+#define CONFIG_SYS_FLASH_SIZE          16*1024*1024
+#define CONFIG_SYS_FLASH_CFI_WIDTH     FLASH_CFI_16BIT
+
+#define CONFIG_SYS_FLASH_BANKS_LIST    { CONFIG_SYS_FLASH_BASE }
+
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
  * Memory bank definitions
  */
 
-#define CONFIG_SYS_CS0_BASE            0xFFE00000
+#define CONFIG_SYS_CS0_BASE            0xFF000000
 #define CONFIG_SYS_CS0_CTRL            0x00001980
-#define CONFIG_SYS_CS0_MASK            0x001F0001
+#define CONFIG_SYS_CS0_MASK            0x00FF0001
 
-#define CONFIG_SYS_CS3_BASE            0xE0000000
-#define CONFIG_SYS_CS0_CTRL            0x00001980
+#define CONFIG_SYS_CS2_BASE            0xE0000000
+#define CONFIG_SYS_CS2_CTRL            0x00001980
+#define CONFIG_SYS_CS2_MASK            0x000F0001
+
+#define CONFIG_SYS_CS3_BASE            0xE0100000
+#define CONFIG_SYS_CS3_CTRL            0x00001980
 #define CONFIG_SYS_CS3_MASK            0x000F0001
 
 /*-----------------------------------------------------------------------
 #define CONFIG_SYS_PCDDR               0x0000000
 #define CONFIG_SYS_PCDAT               0x0000000
 
+#define CONFIG_SYS_PASPAR              0x0F0F
 #define CONFIG_SYS_PEHLPAR             0xC0
 #define CONFIG_SYS_PUAPAR              0x0F
 #define CONFIG_SYS_DDRUA               0x05
 #define CONFIG_SYS_PJPAR               0xFF
 
+/*-----------------------------------------------------------------------
+ * I2C
+ */
+
+#define CONFIG_HARD_I2C
+#define CONFIG_FSL_I2C
+
+#define CONFIG_SYS_I2C_OFFSET          0x00000300
+#define CONFIG_SYS_IMMR                        CONFIG_SYS_MBAR
+
+#define CONFIG_SYS_I2C_SPEED           100000
+#define CONFIG_SYS_I2C_SLAVE           0
+
+#ifdef CONFIG_CMD_DATE
+#define CONFIG_RTC_DS1338
+#define CONFIG_I2C_RTC_ADDR            0x68
+#endif
+
 /*-----------------------------------------------------------------------
  * VIDEO configuration
  */
 #define CONFIG_VIDEO
 
 #ifdef CONFIG_VIDEO
-#define        CONFIG_VIDEO_VCXK                       1
+#define CONFIG_VIDEO_VCXK                      1
 
 #define CONFIG_SYS_VCXK_DEFAULT_LINEALIGN      2
 #define        CONFIG_SYS_VCXK_DOUBLEBUFFERED          1
-#define CONFIG_SYS_VCXK_BASE                   CONFIG_SYS_CS3_BASE
-#define CONFIG_SYS_VCXK_AUTODETECT             1
+#define CONFIG_SYS_VCXK_BASE                   CONFIG_SYS_CS2_BASE
 
 #define CONFIG_SYS_VCXK_ACKNOWLEDGE_PORT       MCFGPTB_GPTPORT
 #define CONFIG_SYS_VCXK_ACKNOWLEDGE_DDR                MCFGPTB_GPTDDR
index 6ae764a2d4a59e85a58fdba6900099c338519335..8fc394245078085f7c0ab164b40edaada00a5223 100644 (file)
@@ -72,9 +72,9 @@
 #define CONFIG_DEFAULT_SPI_MODE        (SPI_MODE_0 | SPI_CS_HIGH)
 
 /* PMIC Controller */
-#define CONFIG_PMIC
-#define CONFIG_PMIC_SPI
-#define CONFIG_PMIC_FSL
+#define CONFIG_POWER
+#define CONFIG_POWER_SPI
+#define CONFIG_POWER_FSL
 #define CONFIG_FSL_PMIC_BUS    1
 #define CONFIG_FSL_PMIC_CS     0
 #define CONFIG_FSL_PMIC_CLK    1000000
index 721cd906adb151ae5214c1bd4f9a7082b38aa5cb..eed38c165f0cf9bb259be4970906f76800969b10 100644 (file)
 # undef CONFIG_DCACHE
 #endif
 
+#ifndef XILINX_DCACHE_BYTE_SIZE
+#define XILINX_DCACHE_BYTE_SIZE        32768
+#endif
+
 /*
  * BOOTP options
  */
index 9d9f4a782290918430c3b865adf240418d5edfef..9e4006b44190a89815a60e7b4d5ad4a9438db4ab 100644 (file)
@@ -68,9 +68,9 @@
 #define CONFIG_MXC_GPIO
 
 /* PMIC Controller */
-#define CONFIG_PMIC
-#define CONFIG_PMIC_SPI
-#define CONFIG_PMIC_FSL
+#define CONFIG_POWER
+#define CONFIG_POWER_SPI
+#define CONFIG_POWER_FSL
 #define CONFIG_FSL_PMIC_BUS    1
 #define CONFIG_FSL_PMIC_CS     0
 #define CONFIG_FSL_PMIC_CLK    1000000
index 223b5b0bb9291b8911f0d2437004c1fd7334b873..3b86c9ebf356562f401c7c22efe38bc7fd850d5a 100644 (file)
@@ -69,9 +69,9 @@
 #define CONFIG_DEFAULT_SPI_MODE        (SPI_MODE_0 | SPI_CS_HIGH)
 
 /* PMIC Controller */
-#define CONFIG_PMIC
-#define CONFIG_PMIC_SPI
-#define CONFIG_PMIC_FSL
+#define CONFIG_POWER
+#define CONFIG_POWER_SPI
+#define CONFIG_POWER_FSL
 #define CONFIG_FSL_PMIC_BUS    1
 #define CONFIG_FSL_PMIC_CS     2
 #define CONFIG_FSL_PMIC_CLK    1000000
index 826c912494d4c1285dfaec6a789821d055d60799..342d53fee0b9363901161353496669ded74aa30c 100644 (file)
@@ -65,9 +65,9 @@
 /*
  * PMIC Configs
  */
-#define CONFIG_PMIC
-#define CONFIG_PMIC_I2C
-#define CONFIG_PMIC_FSL
+#define CONFIG_POWER
+#define CONFIG_POWER_I2C
+#define CONFIG_POWER_FSL
 #define CONFIG_SYS_FSL_PMIC_I2C_ADDR   0x08
 #define CONFIG_RTC_MC13XXX
 
index ffe771f2dcbb73dfb29357b0bde9a056e1bda4d8..3c1c056fe31887bbe7bad40259b81f6a54943842 100644 (file)
 #endif
 
 /* SPI PMIC */
-#define CONFIG_PMIC
-#define CONFIG_PMIC_SPI
-#define CONFIG_PMIC_FSL
+#define CONFIG_POWER
+#define CONFIG_POWER_SPI
+#define CONFIG_POWER_FSL
 #define CONFIG_FSL_PMIC_BUS            0
 #define CONFIG_FSL_PMIC_CS             (0 | 120 << 8)
 #define CONFIG_FSL_PMIC_CLK            25000000
index 225d359ecb762d8568a42b17239ff80644374178..f00cec2809612da064968ed893c9a7cf6aae7be7 100644 (file)
@@ -69,9 +69,9 @@
 #define CONFIG_MXC_SPI
 
 /* PMIC Controller */
-#define CONFIG_PMIC
-#define CONFIG_PMIC_SPI
-#define CONFIG_PMIC_FSL
+#define CONFIG_POWER
+#define CONFIG_POWER_SPI
+#define CONFIG_POWER_FSL
 #define CONFIG_FSL_PMIC_BUS    0
 #define CONFIG_FSL_PMIC_CS     0
 #define CONFIG_FSL_PMIC_CLK    2500000
index d1f684cbc5c1c7ee17203a75fce12dfccf863f84..1916b85e2837f06760cf32cf03a310d549e54aed 100644 (file)
@@ -55,9 +55,9 @@
 #define CONFIG_SYS_I2C_SPEED            100000
 
 /* PMIC Configs */
-#define CONFIG_PMIC
-#define CONFIG_PMIC_I2C
-#define CONFIG_PMIC_FSL
+#define CONFIG_POWER
+#define CONFIG_POWER_I2C
+#define CONFIG_POWER_FSL
 #define CONFIG_SYS_FSL_PMIC_I2C_ADDR    8
 #define CONFIG_RTC_MC13XXX
 
index a1b27cef53569f9e9781ddc711ecfd9bfd0ae3d6..a1101762e382624d9a73dcb283a93b25be8f2ea2 100644 (file)
 #define CONFIG_SYS_I2C_SPEED           100000
 
 /* PMIC Controller */
-#define CONFIG_PMIC
-#define CONFIG_PMIC_I2C
-#define CONFIG_DIALOG_PMIC
-#define CONFIG_PMIC_FSL
+#define CONFIG_POWER
+#define CONFIG_POWER_I2C
+#define CONFIG_DIALOG_POWER
+#define CONFIG_POWER_FSL
 #define CONFIG_SYS_DIALOG_PMIC_I2C_ADDR        0x48
 #define CONFIG_SYS_FSL_PMIC_I2C_ADDR   0x8
 
index 69ff3efb5045c665d8fafec4ca4bdc84e94adcb0..624bd5c7eee122e916db772b65108bae4381d1c9 100644 (file)
@@ -68,6 +68,7 @@
 #define CONFIG_SYS_ALTERA_PIO_GPIO_NUM LED_PIO_WIDTH
 
 #define CONFIG_STATUS_LED              /* Enable status driver */
+#define CONFIG_BOARD_SPECIFIC_LED
 #define CONFIG_GPIO_LED                /* Enable GPIO LED driver */
 #define CONFIG_GPIO                    /* Enable GPIO driver */
 
index e43a02110ec84337f3d383d7daab20dfa133f91a..d9bf2010b833ec81c4011a541b9d50916a5981d5 100644 (file)
@@ -58,9 +58,9 @@
 #define CONFIG_DEFAULT_SPI_MODE        (SPI_MODE_0 | SPI_CS_HIGH)
 #define CONFIG_RTC_MC13XXX
 
-#define CONFIG_PMIC
-#define CONFIG_PMIC_SPI
-#define CONFIG_PMIC_FSL
+#define CONFIG_POWER
+#define CONFIG_POWER_SPI
+#define CONFIG_POWER_FSL
 #define CONFIG_FSL_PMIC_BUS    1
 #define CONFIG_FSL_PMIC_CS     0
 #define CONFIG_FSL_PMIC_CLK    100000
index 7e0b30293560a251e230877fe03a759720b6438d..56e83478f8e857fe975e42f610758c0c3a8d2ee8 100644 (file)
 
 #define CONFIG_SYS_CACHELINE_SIZE       64
 
-#define CONFIG_PMIC
-#define CONFIG_PMIC_I2C
-#define CONFIG_PMIC_MAX8998
+#define CONFIG_POWER
+#define CONFIG_POWER_I2C
+#define CONFIG_POWER_MAX8998
 
 #include <asm/arch/gpio.h>
 /*
index 5fc61364355b367e6aa89ac82945f47db16a5496..894f38bd7db05804f09c6edb046dbe5cb8234e63 100644 (file)
 #define CONFIG_I2C_MULTI_BUS
 #define CONFIG_SYS_MAX_I2C_BUS 7
 
-#define CONFIG_PMIC
-#define CONFIG_PMIC_I2C
-#define CONFIG_PMIC_MAX8998
+#define CONFIG_POWER
+#define CONFIG_POWER_I2C
+#define CONFIG_POWER_MAX8998
 
 #define CONFIG_USB_GADGET
 #define CONFIG_USB_GADGET_S3C_UDC_OTG
index d7808aa7123770c1b227376f84f7e3d8d1dfd86e..355029e8d835a0d4a495c4c1e694472c0e031055 100644 (file)
 #define CONFIG_SOFT_I2C_GPIO_SDA get_multi_sda_pin()
 #define I2C_INIT multi_i2c_init()
 
-#define CONFIG_PMIC
-#define CONFIG_PMIC_I2C
-#define CONFIG_PMIC_MAX8997
-
+#define CONFIG_POWER
+#define CONFIG_POWER_I2C
+#define CONFIG_POWER_MAX8997
+
+#define CONFIG_POWER_FG
+#define CONFIG_POWER_FG_MAX17042
+#define CONFIG_POWER_MUIC
+#define CONFIG_POWER_MUIC_MAX8997
+#define CONFIG_POWER_BATTERY
+#define CONFIG_POWER_BATTERY_TRATS
 #define CONFIG_USB_GADGET
 #define CONFIG_USB_GADGET_S3C_UDC_OTG
 #define CONFIG_USB_GADGET_DUALSPEED
index f46efa55f1651bfec653bc376b9e51762fa7cd62..9f8f240f82274897935e2593f4790ea08e3a9901 100644 (file)
 #define CONFIG_MXC_GPIO
 
 /* MC13783 connected to CSPI3 and SS0 */
-#define CONFIG_PMIC
-#define CONFIG_PMIC_SPI
-#define CONFIG_PMIC_FSL
+#define CONFIG_POWER
+#define CONFIG_POWER_SPI
+#define CONFIG_POWER_FSL
 
 #define CONFIG_FSL_PMIC_BUS            2
 #define CONFIG_FSL_PMIC_CS             0
index 848df88e7dfdd5e4220ff4a3db93ac9d1f7fefc7..a72010ff212dd2d4f491b0b86cfeae8b59bf22b8 100644 (file)
@@ -87,9 +87,9 @@
 #define CONFIG_ENV_IS_IN_SPI_FLASH
 
 /* PMIC Controller */
-#define CONFIG_PMIC
-#define CONFIG_PMIC_SPI
-#define CONFIG_PMIC_FSL
+#define CONFIG_POWER
+#define CONFIG_POWER_SPI
+#define CONFIG_POWER_FSL
 #define CONFIG_FSL_PMIC_BUS    0
 #define CONFIG_FSL_PMIC_CS     0
 #define CONFIG_FSL_PMIC_CLK    2500000
index df8126a66e4753f84f4299e8a15f78e173c7b57b..cbca0dc01fca50ec88d247f60d25c1b2ec3c1872 100644 (file)
@@ -24,8 +24,6 @@
 #ifndef __NIOS2_H__
 #define __NIOS2_H__
 
-#include <linux/stringify.h>
-
 /*------------------------------------------------------------------------
  * Control registers -- use with wrctl() & rdctl()
  *----------------------------------------------------------------------*/
  * Access to control regs
  *----------------------------------------------------------------------*/
 
-#define rdctl(reg)\
-       ({unsigned int val;\
-       asm volatile("rdctl %0, ctl" __stringify(reg) \
-               : "=r" (val) ); val;})
-
-#define wrctl(reg,val)\
-       asm volatile( "wrctl ctl" _str_(reg) ",%0"\
-               : : "r" (val))
+#define rdctl(reg) __builtin_rdctl(reg)
+#define wrctl(reg, val) __builtin_wrctl(reg, val)
 
 /*------------------------------------------------------------------------
  * Control reg bit masks
similarity index 71%
rename from drivers/misc/pmic_max8997.c
rename to include/power/battery.h
index 62dbc05311c2c59be8bea3c49f3300ac5166fbe0..e2fec687dabff20464d7fe0f3e3d235d5c1f5af8 100644 (file)
  * MA 02111-1307 USA
  */
 
-#include <common.h>
-#include <pmic.h>
-#include <max8997_pmic.h>
+#ifndef __POWER_BATTERY_H_
+#define __POWER_BATTERY_H_
 
-int pmic_init(void)
-{
-       struct pmic *p = get_pmic();
-       static const char name[] = "MAX8997_PMIC";
+struct battery {
+       unsigned int version;
+       unsigned int state_of_chrg;
+       unsigned int time_to_empty;
+       unsigned int capacity;
+       unsigned int voltage_uV;
 
-       puts("Board PMIC init\n");
+       unsigned int state;
+};
 
-       p->name = name;
-       p->interface = PMIC_I2C;
-       p->number_of_regs = PMIC_NUM_OF_REGS;
-       p->hw.i2c.addr = MAX8997_I2C_ADDR;
-       p->hw.i2c.tx_num = 1;
-       p->bus = I2C_PMIC;
-
-       return 0;
-}
+int power_bat_init(unsigned char bus);
+#endif /* __POWER_BATTERY_H_ */
diff --git a/include/power/fg_battery_cell_params.h b/include/power/fg_battery_cell_params.h
new file mode 100644 (file)
index 0000000..7ddf6f2
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ *  Copyright (C) 2012 Samsung Electronics
+ *  Lukasz Majewski <l.majewski@samsung.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __FG_BATTERY_CELL_PARAMS_H_
+#define __FG_BATTERY_CELL_PARAMS_H_
+
+#if  defined(CONFIG_POWER_FG_MAX17042) && defined(CONFIG_TRATS)
+
+/* Cell characteristics - Exynos4 TRATS development board */
+/* Shall be written to addr 0x80h */
+u16 cell_character0[16] = {
+       0xA2A0,
+       0xB6E0,
+       0xB850,
+       0xBAD0,
+       0xBB20,
+       0xBB70,
+       0xBBC0,
+       0xBC20,
+       0xBC80,
+       0xBCE0,
+       0xBD80,
+       0xBE20,
+       0xC090,
+       0xC420,
+       0xC910,
+       0xD070
+};
+
+/* Shall be written to addr 0x90h */
+u16 cell_character1[16] = {
+       0x0090,
+       0x1A50,
+       0x02F0,
+       0x2060,
+       0x2060,
+       0x2E60,
+       0x26A0,
+       0x2DB0,
+       0x2DB0,
+       0x1870,
+       0x2A20,
+       0x16F0,
+       0x08F0,
+       0x0D40,
+       0x08C0,
+       0x08C0
+};
+
+/* Shall be written to addr 0xA0h */
+u16 cell_character2[16] = {
+       0x0100,
+       0x0100,
+       0x0100,
+       0x0100,
+       0x0100,
+       0x0100,
+       0x0100,
+       0x0100,
+       0x0100,
+       0x0100,
+       0x0100,
+       0x0100,
+       0x0100,
+       0x0100,
+       0x0100,
+       0x0100
+};
+#endif
+#endif /* __FG_BATTERY_CELL_PARAMS_H_ */
diff --git a/include/power/max17042_fg.h b/include/power/max17042_fg.h
new file mode 100644 (file)
index 0000000..1103a48
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ *  Copyright (C) 2012 Samsung Electronics
+ *  Lukasz Majewski <l.majewski@samsung.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __MAX17042_FG_H_
+#define __MAX17042_FG_H_
+
+/* MAX 17042 registers */
+enum {
+       MAX17042_STATUS         = 0x00,
+       MAX17042_SOCREP         = 0x06,
+       MAX17042_VCELL          = 0x09,
+       MAX17042_CURRENT        = 0x0A,
+       MAX17042_AVG_CURRENT    = 0x0B,
+       MAX17042_SOCMIX = 0x0D,
+       MAX17042_SOCAV          = 0x0E,
+       MAX17042_DESIGN_CAP     = 0x18,
+       MAX17042_AVG_VCELL      = 0x19,
+       MAX17042_CONFIG = 0x1D,
+       MAX17042_VERSION        = 0x21,
+       MAX17042_LEARNCFG       = 0x28,
+       MAX17042_FILTERCFG      = 0x29,
+       MAX17042_RELAXCFG       = 0x2A,
+       MAX17042_MISCCFG        = 0x2B,
+       MAX17042_CGAIN          = 0x2E,
+       MAX17042_COFF           = 0x2F,
+       MAX17042_RCOMP0 = 0x38,
+       MAX17042_TEMPCO = 0x39,
+       MAX17042_FSTAT          = 0x3D,
+       MAX17042_MLOCKReg1      = 0x62,
+       MAX17042_MLOCKReg2      = 0x63,
+       MAX17042_MODEL1         = 0x80,
+       MAX17042_MODEL2         = 0x90,
+       MAX17042_MODEL3         = 0xA0,
+       MAX17042_VFOCV          = 0xFB,
+       MAX17042_VFSOC          = 0xFF,
+
+       FG_NUM_OF_REGS = 0x100,
+};
+
+#define RCOMP0                 0x0060
+#define TempCo                 0x1015
+
+
+#define MAX17042_POR (1 << 1)
+
+#define MODEL_UNLOCK1          0x0059
+#define MODEL_UNLOCK2          0x00c4
+#define MODEL_LOCK1            0x0000
+#define MODEL_LOCK2            0x0000
+
+#define MAX17042_I2C_ADDR      (0x6C >> 1)
+
+int power_fg_init(unsigned char bus);
+#endif /* __MAX17042_FG_H_ */
diff --git a/include/power/max8997_muic.h b/include/power/max8997_muic.h
new file mode 100644 (file)
index 0000000..0149c12
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ *  Copyright (C) 2012 Samsung Electronics
+ *  Lukasz Majewski <l.majewski@samsung.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __MAX8997_MUIC_H_
+#define __MAX8997_MUIC_H_
+
+#include <power/power_chrg.h>
+
+/* MAX8997_MUIC_STATUS2 */
+#define MAX8997_MUIC_CHG_NO    0x00
+#define MAX8997_MUIC_CHG_USB   0x01
+#define MAX8997_MUIC_CHG_USB_D 0x02
+#define MAX8997_MUIC_CHG_TA    0x03
+#define MAX8997_MUIC_CHG_TA_500 0x04
+#define MAX8997_MUIC_CHG_TA_1A 0x05
+#define MAX8997_MUIC_CHG_MASK  0x07
+
+/* MAX 8997 MUIC registers */
+enum {
+       MAX8997_MUIC_ID         = 0x00,
+       MAX8997_MUIC_INT1       = 0x01,
+       MAX8997_MUIC_INT2       = 0x02,
+       MAX8997_MUIC_INT3       = 0x03,
+       MAX8997_MUIC_STATUS1    = 0x04,
+       MAX8997_MUIC_STATUS2    = 0x05,
+       MAX8997_MUIC_STATUS3    = 0x06,
+       MAX8997_MUIC_INTMASK1   = 0x07,
+       MAX8997_MUIC_INTMASK2   = 0x08,
+       MAX8997_MUIC_INTMASK3   = 0x09,
+       MAX8997_MUIC_CDETCTRL   = 0x0A,
+       MAX8997_MUIC_CONTROL1   = 0x0C,
+       MAX8997_MUIC_CONTROL2   = 0x0D,
+       MAX8997_MUIC_CONTROL3   = 0x0E,
+
+       MUIC_NUM_OF_REGS = 0x0F,
+};
+
+#define MAX8997_MUIC_I2C_ADDR  (0x4A >> 1)
+
+int power_muic_init(unsigned int bus);
+#endif /* __MAX8997_MUIC_H_ */
similarity index 88%
rename from include/max8997_pmic.h
rename to include/power/max8997_pmic.h
index 17ae24ea6a0b895ad51e4add1cbf20df7e5412e5..5d2d94df9bcae0e6b5d17af239d2261cb6914379 100644 (file)
@@ -111,7 +111,7 @@ enum {
        MAX8997_REG_MBCCTRL6    = 0x55,
        MAX8997_REG_OTPCGHCVS   = 0x56,
 
-       MAX8997_REG_SAFEOUTCTRL = 0x5a,
+       MAX8997_REG_SAFEOUTCTRL = 0x5a,
 
        MAX8997_REG_LBCNFG1     = 0x5e,
        MAX8997_REG_LBCNFG2     = 0x5f,
@@ -171,9 +171,31 @@ enum {
        PMIC_NUM_OF_REGS = 0x9b,
 };
 
+#define ACTDISSAFEO1 (1 << 4)
+#define ACTDISSAFEO2 (1 << 5)
 #define ENSAFEOUT1 (1 << 6)
 #define ENSAFEOUT2 (1 << 7)
 
+#define ENBUCK (1 << 0)
+#define ACTIVE_DISCHARGE (1 << 3)
+#define GNSLCT (1 << 2)
+#define LDO_ADE (1 << 1)
+#define SAFEOUT_4_85V 0x00
+#define SAFEOUT_4_90V 0x01
+#define SAFEOUT_4_95V 0x02
+#define SAFEOUT_3_30V 0x03
+
+/* Charger */
+enum {CHARGER_ENABLE, CHARGER_DISABLE};
+#define DETBAT                  (1 << 2)
+#define MBCICHFCSET             (1 << 4)
+#define MBCHOSTEN               (1 << 6)
+#define VCHGR_FC                (1 << 7)
+
+#define CHARGER_MIN_CURRENT 200
+#define CHARGER_MAX_CURRENT 950
+#define CHARGER_CURRENT_RESOLUTION 50
+
 #define MAX8997_I2C_ADDR        (0xCC >> 1)
 #define MAX8997_RTC_ADDR       (0x0C >> 1)
 #define MAX8997_MUIC_ADDR      (0x4A >> 1)
@@ -187,4 +209,6 @@ enum {
        EN_LDO = (0x3 << 6),
 };
 
+#define MAX8997_LDO_MAX_VAL 0x3F
+unsigned char max8997_reg_ldo(int uV);
 #endif /* __MAX8997_PMIC_H_ */
similarity index 58%
rename from include/pmic.h
rename to include/power/pmic.h
index 6a05b40aefe34f05a7bd1265772b7b0e2b7e4b3c..1ecfc0543cc51de03d44b30be855856fd12c12bc 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *  Copyright (C) 2011 Samsung Electronics
+ *  Copyright (C) 2011-2012 Samsung Electronics
  *  Lukasz Majewski <l.majewski@samsung.com>
  *
  * See file CREDITS for list of people who contributed to this
 #ifndef __CORE_PMIC_H_
 #define __CORE_PMIC_H_
 
-enum { PMIC_I2C, PMIC_SPI, };
+#include <common.h>
+#include <linux/list.h>
+#include <i2c.h>
+#include <power/power_chrg.h>
+
+enum { PMIC_I2C, PMIC_SPI, PMIC_NONE};
 enum { I2C_PMIC, I2C_NUM, };
 enum { PMIC_READ, PMIC_WRITE, };
+enum { PMIC_SENSOR_BYTE_ORDER_LITTLE, PMIC_SENSOR_BYTE_ORDER_BIG, };
 
 struct p_i2c {
        unsigned char addr;
@@ -43,21 +49,52 @@ struct p_spi {
        u32 (*prepare_tx)(u32 reg, u32 *val, u32 write);
 };
 
+struct pmic;
+struct power_fg {
+       int (*fg_battery_check) (struct pmic *p, struct pmic *bat);
+       int (*fg_battery_update) (struct pmic *p, struct pmic *bat);
+};
+
+struct power_chrg {
+       int (*chrg_type) (struct pmic *p);
+       int (*chrg_bat_present) (struct pmic *p);
+       int (*chrg_state) (struct pmic *p, int state, int current);
+};
+
+struct power_battery {
+       struct battery *bat;
+       int (*battery_init) (struct pmic *bat, struct pmic *p1,
+                            struct pmic *p2, struct pmic *p3);
+       int (*battery_charge) (struct pmic *bat);
+       /* Keep info about power devices involved with battery operation */
+       struct pmic *chrg, *fg, *muic;
+};
+
 struct pmic {
        const char *name;
        unsigned char bus;
        unsigned char interface;
-       unsigned char number_of_regs;
+       unsigned char sensor_byte_order;
+       unsigned int number_of_regs;
        union hw {
                struct p_i2c i2c;
                struct p_spi spi;
        } hw;
+
+       void (*low_power_mode) (void);
+       struct power_battery *pbat;
+       struct power_chrg *chrg;
+       struct power_fg *fg;
+
+       struct pmic *parent;
+       struct list_head list;
 };
 
-int pmic_init(void);
-int pmic_dialog_init(void);
-int check_reg(u32 reg);
-struct pmic *get_pmic(void);
+int pmic_init(unsigned char bus);
+int pmic_dialog_init(unsigned char bus);
+int check_reg(struct pmic *p, u32 reg);
+struct pmic *pmic_alloc(void);
+struct pmic *pmic_get(const char *s);
 int pmic_probe(struct pmic *p);
 int pmic_reg_read(struct pmic *p, u32 reg, u32 *val);
 int pmic_reg_write(struct pmic *p, u32 reg, u32 val);
similarity index 63%
rename from arch/nios2/include/asm/status_led.h
rename to include/power/power_chrg.h
index 20f8d90195530dd7e6cacc5acaa9f8437d363ce4..24c4cde739ea8c36a32f9cbf3da28f7b97f14dca 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * (C) Copyright 2004, Psyent Corporation <www.psyent.com>
- * Scott McNutt <smcnutt@psyent.com>
+ *  Copyright (C) 2012 Samsung Electronics
+ *  Lukasz Majewski <l.majewski@samsung.com>
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -12,7 +12,7 @@
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  * MA 02111-1307 USA
  */
-#ifndef __ASM_STATUS_LED_H__
-#define __ASM_STATUS_LED_H__
 
-typedef unsigned led_id_t;
-extern void __led_init (led_id_t mask, int state);
-extern void __led_set (led_id_t mask, int state);
-inline void __led_toggle (led_id_t mask);
+#ifndef __POWER_CHARGER_H_
+#define __POWER_CHARGER_H_
 
-#endif /* __ASM_STATUS_LED_H__ */
+/* Type of available chargers */
+enum {
+       CHARGER_NO = 0,
+       CHARGER_TA,
+       CHARGER_USB,
+       CHARGER_TA_500,
+       CHARGER_UNKNOWN,
+};
+
+enum {
+       UNKNOWN,
+       EXT_SOURCE,
+       CHARGE,
+       NORMAL,
+};
+
+#endif /* __POWER_CHARGER_H_ */
index da9fae9203ff52120fcd1e1692d7d860739b24ca..27e9127694c7e5208e26dd5ae58d9ed11806cb77 100644 (file)
@@ -273,9 +273,6 @@ void status_led_set  (int led, int state);
 #elif defined(CONFIG_STXXTC)
 /* XXX empty just to avoid the error */
 /************************************************************************/
-#elif defined(CONFIG_NIOS2)
-/* XXX empty just to avoid the error */
-/************************************************************************/
 #elif defined(CONFIG_V38B)
 
 # define STATUS_LED_BIT                0x0010                  /* Timer7 GPIO */
index e5388d89c859bfd6092489e915e9ee3f66b4ffd9..822ae7c01d712e921f19087b6acf34bd2699b74f 100644 (file)
@@ -67,7 +67,8 @@ $(nandobj)u-boot-spl: $(OBJS) $(nandobj)u-boot-nand_spl.lds
 # $(LDSCRIPT). The function make_u_boot_list is defined in helper.mk file.
 $(eval $(call make_u_boot_list, $(LSTSCRIPT), $(OBJS)))
 $(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT) $(LSTSCRIPT)
-       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(obj) -ansi -D__ASSEMBLY__ -P - <$< >$@
+       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(nandobj)/board/$(BOARDDIR) \
+               -ansi -D__ASSEMBLY__ -P - <$< >$@
 
 # create symbolic links for common files
 
index e5388d89c859bfd6092489e915e9ee3f66b4ffd9..822ae7c01d712e921f19087b6acf34bd2699b74f 100644 (file)
@@ -67,7 +67,8 @@ $(nandobj)u-boot-spl: $(OBJS) $(nandobj)u-boot-nand_spl.lds
 # $(LDSCRIPT). The function make_u_boot_list is defined in helper.mk file.
 $(eval $(call make_u_boot_list, $(LSTSCRIPT), $(OBJS)))
 $(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT) $(LSTSCRIPT)
-       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(obj) -ansi -D__ASSEMBLY__ -P - <$< >$@
+       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(nandobj)/board/$(BOARDDIR) \
+               -ansi -D__ASSEMBLY__ -P - <$< >$@
 
 # create symbolic links for common files
 
index e5388d89c859bfd6092489e915e9ee3f66b4ffd9..822ae7c01d712e921f19087b6acf34bd2699b74f 100644 (file)
@@ -67,7 +67,8 @@ $(nandobj)u-boot-spl: $(OBJS) $(nandobj)u-boot-nand_spl.lds
 # $(LDSCRIPT). The function make_u_boot_list is defined in helper.mk file.
 $(eval $(call make_u_boot_list, $(LSTSCRIPT), $(OBJS)))
 $(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT) $(LSTSCRIPT)
-       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(obj) -ansi -D__ASSEMBLY__ -P - <$< >$@
+       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(nandobj)/board/$(BOARDDIR) \
+               -ansi -D__ASSEMBLY__ -P - <$< >$@
 
 # create symbolic links for common files
 
index 43e72c42d48f44515c4e57f0cd7c81f06d969093..f67ed09d039ad8407d0065ccd632504225ea2c85 100644 (file)
@@ -42,7 +42,8 @@ $(nandobj)u-boot-spl: $(OBJS) $(nandobj)u-boot.lds
 # $(LDSCRIPT). The function make_u_boot_list is defined in helper.mk file.
 $(eval $(call make_u_boot_list, $(LSTSCRIPT), $(OBJS)))
 $(nandobj)u-boot.lds: $(LDSCRIPT) $(LSTSCRIPT)
-       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(obj) -ansi -D__ASSEMBLY__ -P - <$< >$@
+       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(nandobj)/board/$(BOARDDIR) \
+               -ansi -D__ASSEMBLY__ -P - <$< >$@
 
 #########################################################################
 
index f270faae02454e0c4eb45ff07feb20f3d22c1c55..9dff94251ed9c44a54bf5ee565c7bb157626b247 100644 (file)
@@ -68,7 +68,8 @@ $(nandobj)u-boot-spl: $(OBJS) $(nandobj)u-boot-nand_spl.lds
 # $(LDSCRIPT). The function make_u_boot_list is defined in helper.mk file.
 $(eval $(call make_u_boot_list, $(LSTSCRIPT), $(OBJS)))
 $(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT) $(LSTSCRIPT)
-       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(obj) -ansi -D__ASSEMBLY__ -P - <$< >$@
+       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(nandobj)board/$(BOARDDIR) \
+                -ansi -D__ASSEMBLY__ -P - <$< >$@
 
 # create symbolic links for common files
 
index b2882844b3b470f5de253ca2608ee2d12426eb19..7a87cf621e78cf50bd1638beb858b006406bf619 100644 (file)
@@ -63,7 +63,8 @@ $(nandobj)u-boot-spl: $(OBJS) $(nandobj)u-boot-nand_spl.lds
 # $(LDSCRIPT). The function make_u_boot_list is defined in helper.mk file.
 $(eval $(call make_u_boot_list, $(LSTSCRIPT), $(OBJS)))
 $(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT) $(LSTSCRIPT)
-       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(obj) -ansi -D__ASSEMBLY__ -P - <$< >$@
+       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(nandobj)/board/$(BOARDDIR) \
+               -ansi -D__ASSEMBLY__ -P - <$< >$@
 
 # create symbolic links for common files
 
index e5388d89c859bfd6092489e915e9ee3f66b4ffd9..822ae7c01d712e921f19087b6acf34bd2699b74f 100644 (file)
@@ -67,7 +67,8 @@ $(nandobj)u-boot-spl: $(OBJS) $(nandobj)u-boot-nand_spl.lds
 # $(LDSCRIPT). The function make_u_boot_list is defined in helper.mk file.
 $(eval $(call make_u_boot_list, $(LSTSCRIPT), $(OBJS)))
 $(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT) $(LSTSCRIPT)
-       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(obj) -ansi -D__ASSEMBLY__ -P - <$< >$@
+       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(nandobj)/board/$(BOARDDIR) \
+               -ansi -D__ASSEMBLY__ -P - <$< >$@
 
 # create symbolic links for common files
 
index becf7fa99ebf4bbf93494c329110bfb8bb07d673..b27189d9b50edc9247eabb353ca3d34c9e5569f0 100644 (file)
@@ -63,7 +63,8 @@ $(nandobj)u-boot-spl: $(OBJS) $(nandobj)u-boot.lds
 # $(LDSCRIPT). The function make_u_boot_list is defined in helper.mk file.
 $(eval $(call make_u_boot_list, $(LSTSCRIPT), $(OBJS)))
 $(nandobj)u-boot.lds: $(LDSCRIPT) $(LSTSCRIPT)
-       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(obj) -ansi -D__ASSEMBLY__ -P - <$< >$@
+       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(nandobj)/board/$(BOARDDIR) \
+               -ansi -D__ASSEMBLY__ -P - <$< >$@
 
 #########################################################################
 
index a283a2d1f4b2e0bdbb519f58c3a5af9bb87fb0e5..d2971f48983afe05f259be47284360442cbac552 100644 (file)
@@ -145,10 +145,11 @@ class Series(dict):
         Return:
             The change log as a list of strings, one per line
 
-            Changes in v2:
+            Changes in v4:
             - Jog the dial back closer to the widget
 
-            Changes in v1:
+            Changes in v3: None
+            Changes in v2:
             - Fix the widget
             - Jog the dial
 
@@ -162,12 +163,16 @@ class Series(dict):
                 if commit and this_commit != commit:
                     continue
                 out.append(text)
-            if out:
-                out = ['Changes in v%d:' % change] + out
-                if need_blank:
-                    out = [''] + out
-                final += out
-                need_blank = True
+            line = 'Changes in v%d:' % change
+            have_changes = len(out) > 0
+            if have_changes:
+                out.insert(0, line)
+            else:
+                out = [line + ' None']
+            if need_blank:
+                out.insert(0, '')
+            final += out
+            need_blank = have_changes
         if self.changes:
             final.append('')
         return final