]> git.sur5r.net Git - u-boot/commitdiff
Merge branch 'next'
authorGerald Van Baren <gvb@unssw.com>
Tue, 20 Nov 2012 00:26:35 +0000 (19:26 -0500)
committerGerald Van Baren <gvb@unssw.com>
Tue, 20 Nov 2012 00:26:35 +0000 (19:26 -0500)
103 files changed:
MAKEALL
Makefile
README
arch/arm/include/asm/imx-common/mx5_video.h [new file with mode: 0644]
arch/arm/lib/board.c
arch/nios2/include/asm/status_led.h [deleted file]
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/config.mk [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/Makefile
board/freescale/mx51evk/mx51evk.c
board/freescale/mx51evk/mx51evk_video.c [new file with mode: 0644]
board/freescale/mx53evk/mx53evk.c
board/freescale/mx53loco/Makefile
board/freescale/mx53loco/mx53loco.c
board/freescale/mx53loco/mx53loco_video.c [new file with mode: 0644]
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_bmp.c
common/cmd_mmc.c
common/lcd.c
drivers/misc/Makefile
drivers/misc/pmic_core.c [deleted file]
drivers/misc/pmic_dialog.c [deleted file]
drivers/misc/pmic_fsl.c [deleted file]
drivers/misc/pmic_i2c.c [deleted file]
drivers/misc/pmic_max8997.c [deleted file]
drivers/misc/pmic_max8998.c [deleted file]
drivers/misc/pmic_spi.c [deleted file]
drivers/power/Makefile
drivers/power/battery/Makefile [new file with mode: 0644]
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 [new file with mode: 0644]
drivers/power/power_core.c [new file with mode: 0644]
drivers/power/power_dialog.c [new file with mode: 0644]
drivers/power/power_fsl.c [new file with mode: 0644]
drivers/power/power_i2c.c [new file with mode: 0644]
drivers/power/power_spi.c [new file with mode: 0644]
drivers/rtc/mc13xxx-rtc.c
drivers/video/atmel_hlcdfb.c
drivers/video/bus_vcxk.c
drivers/video/cfb_console.c
drivers/video/ipu_common.c
fs/fs.c
fs/zfs/zfs.c
include/atmel_hlcdc.h
include/configs/PK1C20.h
include/configs/eb_cpu5282.h
include/configs/imx31_litekit.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/lcd.h
include/max8997_pmic.h [deleted file]
include/max8998_pmic.h [deleted file]
include/nios2.h
include/pmic.h [deleted file]
include/power/battery.h [new file with mode: 0644]
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 [new file with mode: 0644]
include/power/max8998_pmic.h [new file with mode: 0644]
include/power/pmic.h [new file with mode: 0644]
include/power/power_chrg.h [new file with mode: 0644]
include/status_led.h
include/video.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 \
diff --git a/README b/README
index 6c7784263e7ad6ce2ec913e8f8b477b2d845617a..335207b628ad5d909d9d417c2dffd373d16f011a 100644 (file)
--- a/README
+++ b/README
@@ -1469,6 +1469,11 @@ CBFS (Coreboot Filesystem) support
                Normally display is black on white background; define
                CONFIG_SYS_WHITE_ON_BLACK to get it inverted.
 
+               CONFIG_LCD_BMP_RLE8
+
+               Support drawing of RLE8-compressed bitmaps on the LCD.
+
+
 - Splash Screen Support: CONFIG_SPLASH_SCREEN
 
                If this option is set, the environment is checked for
diff --git a/arch/arm/include/asm/imx-common/mx5_video.h b/arch/arm/include/asm/imx-common/mx5_video.h
new file mode 100644 (file)
index 0000000..e54c25a
--- /dev/null
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2012
+ * Anatolij Gustschin, DENX Software Engineering, <agust@denx.de>
+ *
+ * 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.
+ */
+#ifndef __MX5_VIDEO_H
+#define __MX5_VIDEO_H
+
+#ifdef CONFIG_VIDEO
+void lcd_enable(void);
+void setup_iomux_lcd(void);
+#else
+static inline void lcd_enable(void) { }
+static inline void setup_iomux_lcd(void) { }
+#endif
+
+#endif
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: ");
diff --git a/arch/nios2/include/asm/status_led.h b/arch/nios2/include/asm/status_led.h
deleted file mode 100644 (file)
index 20f8d90..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * (C) Copyright 2004, Psyent Corporation <www.psyent.com>
- * Scott McNutt <smcnutt@psyent.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 __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);
-
-#endif /* __ASM_STATUS_LED_H__ */
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
diff --git a/board/BuS/eb_cpu5282/config.mk b/board/BuS/eb_cpu5282/config.mk
deleted file mode 100644 (file)
index 18fb84e..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-# (C) Copyright 2000-2003
-# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
-# Coldfire contribution by Bernhard Kuhn <bkuhn@metrowerks.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 CONFIG_SYS_TEXT_BASE
-CONFIG_SYS_TEXT_BASE = 0xFE000000
-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 224eaa3c734fb497cfe66c013bc91e1b189bf723..2310fe137d73644b3738ceaae3732f1adcc1a3b5 100644 (file)
@@ -23,8 +23,10 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).o
 
-COBJS  := mx51evk.o
+COBJS-y                        += mx51evk.o
+COBJS-$(CONFIG_VIDEO)  += mx51evk_video.o
 
+COBJS  := $(COBJS-y)
 SRCS   := $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
 
index 421d8c224444e4ba935f71e6cf9fde39307e385a..d1ef431895a0786f72eb4ae42413202ee9200e97 100644 (file)
 #include <asm/arch/sys_proto.h>
 #include <asm/arch/crm_regs.h>
 #include <asm/arch/clock.h>
+#include <asm/imx-common/mx5_video.h>
 #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>
-#include <linux/fb.h>
-#include <ipu_pixfmt.h>
-
-#define MX51EVK_LCD_3V3                IMX_GPIO_NR(4, 9)
-#define MX51EVK_LCD_5V         IMX_GPIO_NR(4, 10)
-#define MX51EVK_LCD_BACKLIGHT  IMX_GPIO_NR(3, 4)
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -252,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);
@@ -471,54 +472,6 @@ int board_mmc_init(bd_t *bis)
 }
 #endif
 
-static struct fb_videomode const claa_wvga = {
-       .name           = "CLAA07LC0ACW",
-       .refresh        = 57,
-       .xres           = 800,
-       .yres           = 480,
-       .pixclock       = 37037,
-       .left_margin    = 40,
-       .right_margin   = 60,
-       .upper_margin   = 10,
-       .lower_margin   = 10,
-       .hsync_len      = 20,
-       .vsync_len      = 10,
-       .sync           = 0,
-       .vmode          = FB_VMODE_NONINTERLACED
-};
-
-void lcd_iomux(void)
-{
-       /* DI2_PIN15 */
-       mxc_request_iomux(MX51_PIN_DI_GP4, IOMUX_CONFIG_ALT4);
-
-       /* Pad settings for MX51_PIN_DI2_DISP_CLK */
-       mxc_iomux_set_pad(MX51_PIN_DI2_DISP_CLK, PAD_CTL_HYS_NONE |
-                         PAD_CTL_PKE_ENABLE | PAD_CTL_PUE_KEEPER |
-                         PAD_CTL_DRV_MAX | PAD_CTL_SRE_SLOW);
-
-       /* Turn on 3.3V voltage for LCD */
-       mxc_request_iomux(MX51_PIN_CSI2_D12, IOMUX_CONFIG_ALT3);
-       gpio_direction_output(MX51EVK_LCD_3V3, 1);
-
-       /* Turn on 5V voltage for LCD */
-       mxc_request_iomux(MX51_PIN_CSI2_D13, IOMUX_CONFIG_ALT3);
-       gpio_direction_output(MX51EVK_LCD_5V, 1);
-
-       /* Turn on GPIO backlight */
-       mxc_request_iomux(MX51_PIN_DI1_D1_CS, IOMUX_CONFIG_ALT4);
-       mxc_iomux_set_input(MX51_GPIO3_IPP_IND_G_IN_4_SELECT_INPUT,
-                                                       INPUT_CTL_PATH1);
-       gpio_direction_output(MX51EVK_LCD_BACKLIGHT, 1);
-}
-
-void lcd_enable(void)
-{
-       int ret = ipuv3_fb_init(&claa_wvga, 1, IPU_PIX_FMT_RGB565);
-       if (ret)
-               printf("LCD cannot be configured: %d\n", ret);
-}
-
 int board_early_init_f(void)
 {
        setup_iomux_uart();
@@ -526,7 +479,7 @@ int board_early_init_f(void)
 #ifdef CONFIG_USB_EHCI_MX5
        setup_usb_h1();
 #endif
-       lcd_iomux();
+       setup_iomux_lcd();
 
        return 0;
 }
diff --git a/board/freescale/mx51evk/mx51evk_video.c b/board/freescale/mx51evk/mx51evk_video.c
new file mode 100644 (file)
index 0000000..f036cf7
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2012 Freescale Semiconductor, Inc.
+ * Fabio Estevam <fabio.estevam@freescale.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 <linux/list.h>
+#include <asm/gpio.h>
+#include <asm/arch/iomux.h>
+#include <linux/fb.h>
+#include <ipu_pixfmt.h>
+
+#define MX51EVK_LCD_3V3                IMX_GPIO_NR(4, 9)
+#define MX51EVK_LCD_5V         IMX_GPIO_NR(4, 10)
+#define MX51EVK_LCD_BACKLIGHT  IMX_GPIO_NR(3, 4)
+
+static struct fb_videomode const claa_wvga = {
+       .name           = "CLAA07LC0ACW",
+       .refresh        = 57,
+       .xres           = 800,
+       .yres           = 480,
+       .pixclock       = 37037,
+       .left_margin    = 40,
+       .right_margin   = 60,
+       .upper_margin   = 10,
+       .lower_margin   = 10,
+       .hsync_len      = 20,
+       .vsync_len      = 10,
+       .sync           = 0,
+       .vmode          = FB_VMODE_NONINTERLACED
+};
+
+void setup_iomux_lcd(void)
+{
+       /* DI2_PIN15 */
+       mxc_request_iomux(MX51_PIN_DI_GP4, IOMUX_CONFIG_ALT4);
+
+       /* Pad settings for MX51_PIN_DI2_DISP_CLK */
+       mxc_iomux_set_pad(MX51_PIN_DI2_DISP_CLK, PAD_CTL_HYS_NONE |
+                         PAD_CTL_PKE_ENABLE | PAD_CTL_PUE_KEEPER |
+                         PAD_CTL_DRV_MAX | PAD_CTL_SRE_SLOW);
+
+       /* Turn on 3.3V voltage for LCD */
+       mxc_request_iomux(MX51_PIN_CSI2_D12, IOMUX_CONFIG_ALT3);
+       gpio_direction_output(MX51EVK_LCD_3V3, 1);
+
+       /* Turn on 5V voltage for LCD */
+       mxc_request_iomux(MX51_PIN_CSI2_D13, IOMUX_CONFIG_ALT3);
+       gpio_direction_output(MX51EVK_LCD_5V, 1);
+
+       /* Turn on GPIO backlight */
+       mxc_request_iomux(MX51_PIN_DI1_D1_CS, IOMUX_CONFIG_ALT4);
+       mxc_iomux_set_input(MX51_GPIO3_IPP_IND_G_IN_4_SELECT_INPUT,
+                                                       INPUT_CTL_PATH1);
+       gpio_direction_output(MX51EVK_LCD_BACKLIGHT, 1);
+}
+
+void lcd_enable(void)
+{
+       int ret = ipuv3_fb_init(&claa_wvga, 1, IPU_PIX_FMT_RGB565);
+       if (ret)
+               printf("LCD cannot be configured: %d\n", ret);
+}
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 8bc69a92c1c0e8a6c05a5084f5dc2ae14a430b86..3be17c5917c37c12dea9afe2496ccf95681afae1 100644 (file)
@@ -22,8 +22,10 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).o
 
-COBJS  := mx53loco.o
+COBJS-y                        += mx53loco.o
+COBJS-$(CONFIG_VIDEO)  += mx53loco_video.o
 
+COBJS  := $(COBJS-y)
 SRCS   := $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
 
index a11e8831866cfa143bb18ba0f6aeac3fec71b8a1..81c511cdc187fd22cd4887dd2e0a0e79a88d819d 100644 (file)
 #include <asm/arch/iomux.h>
 #include <asm/arch/clock.h>
 #include <asm/errno.h>
+#include <asm/imx-common/mx5_video.h>
 #include <netdev.h>
 #include <i2c.h>
 #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>
@@ -344,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;
@@ -363,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);
@@ -412,74 +424,11 @@ static void clock_1GHz(void)
                printf("CPU:   Switch DDR clock to 400MHz failed\n");
 }
 
-static struct fb_videomode const claa_wvga = {
-       .name           = "CLAA07LC0ACW",
-       .refresh        = 57,
-       .xres           = 800,
-       .yres           = 480,
-       .pixclock       = 37037,
-       .left_margin    = 40,
-       .right_margin   = 60,
-       .upper_margin   = 10,
-       .lower_margin   = 10,
-       .hsync_len      = 20,
-       .vsync_len      = 10,
-       .sync           = 0,
-       .vmode          = FB_VMODE_NONINTERLACED
-};
-
-void lcd_iomux(void)
-{
-       mxc_request_iomux(MX53_PIN_DI0_DISP_CLK, IOMUX_CONFIG_ALT0);
-       mxc_request_iomux(MX53_PIN_DI0_PIN15, IOMUX_CONFIG_ALT0);
-       mxc_request_iomux(MX53_PIN_DI0_PIN2, IOMUX_CONFIG_ALT0);
-       mxc_request_iomux(MX53_PIN_DI0_PIN3, IOMUX_CONFIG_ALT0);
-       mxc_request_iomux(MX53_PIN_DISP0_DAT0, IOMUX_CONFIG_ALT0);
-       mxc_request_iomux(MX53_PIN_DISP0_DAT1, IOMUX_CONFIG_ALT0);
-       mxc_request_iomux(MX53_PIN_DISP0_DAT2, IOMUX_CONFIG_ALT0);
-       mxc_request_iomux(MX53_PIN_DISP0_DAT3, IOMUX_CONFIG_ALT0);
-       mxc_request_iomux(MX53_PIN_DISP0_DAT4, IOMUX_CONFIG_ALT0);
-       mxc_request_iomux(MX53_PIN_DISP0_DAT5, IOMUX_CONFIG_ALT0);
-       mxc_request_iomux(MX53_PIN_DISP0_DAT6, IOMUX_CONFIG_ALT0);
-       mxc_request_iomux(MX53_PIN_DISP0_DAT7, IOMUX_CONFIG_ALT0);
-       mxc_request_iomux(MX53_PIN_DISP0_DAT8, IOMUX_CONFIG_ALT0);
-       mxc_request_iomux(MX53_PIN_DISP0_DAT9, IOMUX_CONFIG_ALT0);
-       mxc_request_iomux(MX53_PIN_DISP0_DAT10, IOMUX_CONFIG_ALT0);
-       mxc_request_iomux(MX53_PIN_DISP0_DAT11, IOMUX_CONFIG_ALT0);
-       mxc_request_iomux(MX53_PIN_DISP0_DAT12, IOMUX_CONFIG_ALT0);
-       mxc_request_iomux(MX53_PIN_DISP0_DAT13, IOMUX_CONFIG_ALT0);
-       mxc_request_iomux(MX53_PIN_DISP0_DAT14, IOMUX_CONFIG_ALT0);
-       mxc_request_iomux(MX53_PIN_DISP0_DAT15, IOMUX_CONFIG_ALT0);
-       mxc_request_iomux(MX53_PIN_DISP0_DAT16, IOMUX_CONFIG_ALT0);
-       mxc_request_iomux(MX53_PIN_DISP0_DAT17, IOMUX_CONFIG_ALT0);
-       mxc_request_iomux(MX53_PIN_DISP0_DAT18, IOMUX_CONFIG_ALT0);
-       mxc_request_iomux(MX53_PIN_DISP0_DAT19, IOMUX_CONFIG_ALT0);
-       mxc_request_iomux(MX53_PIN_DISP0_DAT20, IOMUX_CONFIG_ALT0);
-       mxc_request_iomux(MX53_PIN_DISP0_DAT21, IOMUX_CONFIG_ALT0);
-       mxc_request_iomux(MX53_PIN_DISP0_DAT22, IOMUX_CONFIG_ALT0);
-       mxc_request_iomux(MX53_PIN_DISP0_DAT23, IOMUX_CONFIG_ALT0);
-
-       /* Turn on GPIO backlight */
-       mxc_request_iomux(MX53_PIN_EIM_D24, IOMUX_CONFIG_ALT1);
-       gpio_direction_output(MX53LOCO_LCD_POWER, 1);
-
-       /* Turn on display contrast */
-       mxc_request_iomux(MX53_PIN_GPIO_1, IOMUX_CONFIG_ALT1);
-       gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_GPIO_1), 1);
-}
-
-void lcd_enable(void)
-{
-       int ret = ipuv3_fb_init(&claa_wvga, 0, IPU_PIX_FMT_RGB565);
-       if (ret)
-               printf("LCD cannot be configured: %d\n", ret);
-}
-
 int board_early_init_f(void)
 {
        setup_iomux_uart();
        setup_iomux_fec();
-       lcd_iomux();
+       setup_iomux_lcd();
 
        return 0;
 }
diff --git a/board/freescale/mx53loco/mx53loco_video.c b/board/freescale/mx53loco/mx53loco_video.c
new file mode 100644 (file)
index 0000000..69991e8
--- /dev/null
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2012 Freescale Semiconductor, Inc.
+ * Fabio Estevam <fabio.estevam@freescale.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 <linux/list.h>
+#include <asm/gpio.h>
+#include <asm/arch/iomux.h>
+#include <linux/fb.h>
+#include <ipu_pixfmt.h>
+
+#define MX53LOCO_LCD_POWER             IMX_GPIO_NR(3, 24)
+
+static struct fb_videomode const claa_wvga = {
+       .name           = "CLAA07LC0ACW",
+       .refresh        = 57,
+       .xres           = 800,
+       .yres           = 480,
+       .pixclock       = 37037,
+       .left_margin    = 40,
+       .right_margin   = 60,
+       .upper_margin   = 10,
+       .lower_margin   = 10,
+       .hsync_len      = 20,
+       .vsync_len      = 10,
+       .sync           = 0,
+       .vmode          = FB_VMODE_NONINTERLACED
+};
+
+void setup_iomux_lcd(void)
+{
+       mxc_request_iomux(MX53_PIN_DI0_DISP_CLK, IOMUX_CONFIG_ALT0);
+       mxc_request_iomux(MX53_PIN_DI0_PIN15, IOMUX_CONFIG_ALT0);
+       mxc_request_iomux(MX53_PIN_DI0_PIN2, IOMUX_CONFIG_ALT0);
+       mxc_request_iomux(MX53_PIN_DI0_PIN3, IOMUX_CONFIG_ALT0);
+       mxc_request_iomux(MX53_PIN_DISP0_DAT0, IOMUX_CONFIG_ALT0);
+       mxc_request_iomux(MX53_PIN_DISP0_DAT1, IOMUX_CONFIG_ALT0);
+       mxc_request_iomux(MX53_PIN_DISP0_DAT2, IOMUX_CONFIG_ALT0);
+       mxc_request_iomux(MX53_PIN_DISP0_DAT3, IOMUX_CONFIG_ALT0);
+       mxc_request_iomux(MX53_PIN_DISP0_DAT4, IOMUX_CONFIG_ALT0);
+       mxc_request_iomux(MX53_PIN_DISP0_DAT5, IOMUX_CONFIG_ALT0);
+       mxc_request_iomux(MX53_PIN_DISP0_DAT6, IOMUX_CONFIG_ALT0);
+       mxc_request_iomux(MX53_PIN_DISP0_DAT7, IOMUX_CONFIG_ALT0);
+       mxc_request_iomux(MX53_PIN_DISP0_DAT8, IOMUX_CONFIG_ALT0);
+       mxc_request_iomux(MX53_PIN_DISP0_DAT9, IOMUX_CONFIG_ALT0);
+       mxc_request_iomux(MX53_PIN_DISP0_DAT10, IOMUX_CONFIG_ALT0);
+       mxc_request_iomux(MX53_PIN_DISP0_DAT11, IOMUX_CONFIG_ALT0);
+       mxc_request_iomux(MX53_PIN_DISP0_DAT12, IOMUX_CONFIG_ALT0);
+       mxc_request_iomux(MX53_PIN_DISP0_DAT13, IOMUX_CONFIG_ALT0);
+       mxc_request_iomux(MX53_PIN_DISP0_DAT14, IOMUX_CONFIG_ALT0);
+       mxc_request_iomux(MX53_PIN_DISP0_DAT15, IOMUX_CONFIG_ALT0);
+       mxc_request_iomux(MX53_PIN_DISP0_DAT16, IOMUX_CONFIG_ALT0);
+       mxc_request_iomux(MX53_PIN_DISP0_DAT17, IOMUX_CONFIG_ALT0);
+       mxc_request_iomux(MX53_PIN_DISP0_DAT18, IOMUX_CONFIG_ALT0);
+       mxc_request_iomux(MX53_PIN_DISP0_DAT19, IOMUX_CONFIG_ALT0);
+       mxc_request_iomux(MX53_PIN_DISP0_DAT20, IOMUX_CONFIG_ALT0);
+       mxc_request_iomux(MX53_PIN_DISP0_DAT21, IOMUX_CONFIG_ALT0);
+       mxc_request_iomux(MX53_PIN_DISP0_DAT22, IOMUX_CONFIG_ALT0);
+       mxc_request_iomux(MX53_PIN_DISP0_DAT23, IOMUX_CONFIG_ALT0);
+
+       /* Turn on GPIO backlight */
+       mxc_request_iomux(MX53_PIN_EIM_D24, IOMUX_CONFIG_ALT1);
+       gpio_direction_output(MX53LOCO_LCD_POWER, 1);
+
+       /* Turn on display contrast */
+       mxc_request_iomux(MX53_PIN_GPIO_1, IOMUX_CONFIG_ALT1);
+       gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_GPIO_1), 1);
+}
+
+void lcd_enable(void)
+{
+       int ret = ipuv3_fb_init(&claa_wvga, 0, IPU_PIX_FMT_RGB565);
+       if (ret)
+               printf("LCD cannot be configured: %d\n", ret);
+}
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 b8809e3bf5409bd154f2ced0a193392794ac32df..5a52edde31dff8c4083baa449302ffab1b906cb4 100644 (file)
@@ -31,6 +31,7 @@
 #include <command.h>
 #include <asm/byteorder.h>
 #include <malloc.h>
+#include <video.h>
 
 static int bmp_info (ulong addr);
 
@@ -238,9 +239,7 @@ int bmp_display(ulong addr, int x, int y)
 #if defined(CONFIG_LCD)
        ret = lcd_display_bitmap((ulong)bmp, x, y);
 #elif defined(CONFIG_VIDEO)
-       extern int video_display_bitmap (ulong, int, int);
-
-       ret = video_display_bitmap ((unsigned long)bmp, x, y);
+       ret = video_display_bitmap((unsigned long)bmp, x, y);
 #else
 # error bmp_display() requires CONFIG_LCD or CONFIG_VIDEO
 #endif
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 b6be8002d201692535602677ae2d002b8618e088..4c83a8bf0355d2912840e06046b7f0c2a4aaed80 100644 (file)
@@ -642,6 +642,138 @@ static void splash_align_axis(int *axis, unsigned long panel_size,
 }
 #endif
 
+
+#ifdef CONFIG_LCD_BMP_RLE8
+
+#define BMP_RLE8_ESCAPE                0
+#define BMP_RLE8_EOL           0
+#define BMP_RLE8_EOBMP         1
+#define BMP_RLE8_DELTA         2
+
+static void draw_unencoded_bitmap(ushort **fbp, uchar *bmap, ushort *cmap,
+                                 int cnt)
+{
+       while (cnt > 0) {
+               *(*fbp)++ = cmap[*bmap++];
+               cnt--;
+       }
+}
+
+static void draw_encoded_bitmap(ushort **fbp, ushort c, int cnt)
+{
+       ushort *fb = *fbp;
+       int cnt_8copy = cnt >> 3;
+
+       cnt -= cnt_8copy << 3;
+       while (cnt_8copy > 0) {
+               *fb++ = c;
+               *fb++ = c;
+               *fb++ = c;
+               *fb++ = c;
+               *fb++ = c;
+               *fb++ = c;
+               *fb++ = c;
+               *fb++ = c;
+               cnt_8copy--;
+       }
+       while (cnt > 0) {
+               *fb++ = c;
+               cnt--;
+       }
+       (*fbp) = fb;
+}
+
+/*
+ * Do not call this function directly, must be called from
+ * lcd_display_bitmap.
+ */
+static void lcd_display_rle8_bitmap(bmp_image_t *bmp, ushort *cmap, uchar *fb,
+                                   int x_off, int y_off)
+{
+       uchar *bmap;
+       ulong width, height;
+       ulong cnt, runlen;
+       int x, y;
+       int decode = 1;
+
+       width = le32_to_cpu(bmp->header.width);
+       height = le32_to_cpu(bmp->header.height);
+       bmap = (uchar *)bmp + le32_to_cpu(bmp->header.data_offset);
+
+       x = 0;
+       y = height - 1;
+
+       while (decode) {
+               if (bmap[0] == BMP_RLE8_ESCAPE) {
+                       switch (bmap[1]) {
+                       case BMP_RLE8_EOL:
+                               /* end of line */
+                               bmap += 2;
+                               x = 0;
+                               y--;
+                               /* 16bpix, 2-byte per pixel, width should *2 */
+                               fb -= (width * 2 + lcd_line_length);
+                               break;
+                       case BMP_RLE8_EOBMP:
+                               /* end of bitmap */
+                               decode = 0;
+                               break;
+                       case BMP_RLE8_DELTA:
+                               /* delta run */
+                               x += bmap[2];
+                               y -= bmap[3];
+                               /* 16bpix, 2-byte per pixel, x should *2 */
+                               fb = (uchar *) (lcd_base + (y + y_off - 1)
+                                       * lcd_line_length + (x + x_off) * 2);
+                               bmap += 4;
+                               break;
+                       default:
+                               /* unencoded run */
+                               runlen = bmap[1];
+                               bmap += 2;
+                               if (y < height) {
+                                       if (x < width) {
+                                               if (x + runlen > width)
+                                                       cnt = width - x;
+                                               else
+                                                       cnt = runlen;
+                                               draw_unencoded_bitmap(
+                                                       (ushort **)&fb,
+                                                       bmap, cmap, cnt);
+                                       }
+                                       x += runlen;
+                               }
+                               bmap += runlen;
+                               if (runlen & 1)
+                                       bmap++;
+                       }
+               } else {
+                       /* encoded run */
+                       if (y < height) {
+                               runlen = bmap[0];
+                               if (x < width) {
+                                       /* aggregate the same code */
+                                       while (bmap[0] == 0xff &&
+                                              bmap[2] != BMP_RLE8_ESCAPE &&
+                                              bmap[1] == bmap[3]) {
+                                               runlen += bmap[2];
+                                               bmap += 2;
+                                       }
+                                       if (x + runlen > width)
+                                               cnt = width - x;
+                                       else
+                                               cnt = runlen;
+                                       draw_encoded_bitmap((ushort **)&fb,
+                                               cmap[bmap[1]], cnt);
+                               }
+                               x += runlen;
+                       }
+                       bmap += 2;
+               }
+       }
+}
+#endif
+
 #if defined(CONFIG_MPC823) || defined(CONFIG_MCC200)
 #define FB_PUT_BYTE(fb, from) *(fb)++ = (255 - *(from)++)
 #else
@@ -675,7 +807,7 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
        uchar *fb;
        bmp_image_t *bmp=(bmp_image_t *)bmp_image;
        uchar *bmap;
-       ushort padded_line;
+       ushort padded_width;
        unsigned long width, height, byte_width;
        unsigned long pwidth = panel_info.vl_col;
        unsigned colors, bpix, bmp_bpix;
@@ -762,7 +894,7 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
        }
 #endif
 
-       padded_line = (width&0x3) ? ((width&~0x3)+4) : (width);
+       padded_width = (width&0x3) ? ((width&~0x3)+4) : (width);
 
 #ifdef CONFIG_SPLASH_SCREEN_ALIGN
        splash_align_axis(&x, pwidth, width);
@@ -781,6 +913,18 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
        switch (bmp_bpix) {
        case 1: /* pass through */
        case 8:
+#ifdef CONFIG_LCD_BMP_RLE8
+               if (le32_to_cpu(bmp->header.compression) == BMP_BI_RLE8) {
+                       if (bpix != 16) {
+                               /* TODO implement render code for bpix != 16 */
+                               printf("Error: only support 16 bpix");
+                               return 1;
+                       }
+                       lcd_display_rle8_bitmap(bmp, cmap_base, fb, x, y);
+                       break;
+               }
+#endif
+
                if (bpix != 16)
                        byte_width = width;
                else
@@ -796,7 +940,7 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
                                        fb += sizeof(uint16_t) / sizeof(*fb);
                                }
                        }
-                       bmap += (width - padded_line);
+                       bmap += (padded_width - width);
                        fb   -= (byte_width + lcd_line_length);
                }
                break;
@@ -808,7 +952,7 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
                        for (j = 0; j < width; j++)
                                fb_put_word(&fb, &bmap);
 
-                       bmap += (padded_line - width) * 2;
+                       bmap += (padded_width - width) * 2;
                        fb   -= (width * 2 + lcd_line_length);
                }
                break;
@@ -885,5 +1029,31 @@ static void *lcd_logo(void)
 #endif /* CONFIG_LCD_LOGO && !CONFIG_LCD_INFO_BELOW_LOGO */
 }
 
+void lcd_position_cursor(unsigned col, unsigned row)
+{
+       console_col = min(col, CONSOLE_COLS - 1);
+       console_row = min(row, CONSOLE_ROWS - 1);
+}
+
+int lcd_get_pixel_width(void)
+{
+       return panel_info.vl_col;
+}
+
+int lcd_get_pixel_height(void)
+{
+       return panel_info.vl_row;
+}
+
+int lcd_get_screen_rows(void)
+{
+       return CONSOLE_ROWS;
+}
+
+int lcd_get_screen_columns(void)
+{
+       return CONSOLE_COLS;
+}
+
 /************************************************************************/
 /************************************************************************/
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"
-);
diff --git a/drivers/misc/pmic_dialog.c b/drivers/misc/pmic_dialog.c
deleted file mode 100644 (file)
index e97af1d..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- *  Copyright (C) 2011 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.
- */
-
-#include <common.h>
-#include <pmic.h>
-#include <dialog_pmic.h>
-
-int pmic_dialog_init(void)
-{
-       struct pmic *p = get_pmic();
-       static const char name[] = "DIALOG_PMIC";
-
-       p->name = name;
-       p->number_of_regs = DIALOG_NUM_OF_REGS;
-
-       p->interface = PMIC_I2C;
-       p->hw.i2c.addr = CONFIG_SYS_DIALOG_PMIC_I2C_ADDR;
-       p->hw.i2c.tx_num = 1;
-       p->bus = I2C_PMIC;
-
-       return 0;
-}
diff --git a/drivers/misc/pmic_fsl.c b/drivers/misc/pmic_fsl.c
deleted file mode 100644 (file)
index 0ff75ed..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- *  Copyright (C) 2011 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 <spi.h>
-#include <pmic.h>
-#include <fsl_pmic.h>
-
-#if defined(CONFIG_PMIC_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)
-{
-       struct pmic *p = get_pmic();
-       static const char name[] = "FSL_PMIC";
-
-       p->name = name;
-       p->number_of_regs = PMIC_NUM_OF_REGS;
-
-#if defined(CONFIG_PMIC_SPI)
-       p->interface = PMIC_SPI;
-       p->bus = CONFIG_FSL_PMIC_BUS;
-       p->hw.spi.cs = CONFIG_FSL_PMIC_CS;
-       p->hw.spi.clk = CONFIG_FSL_PMIC_CLK;
-       p->hw.spi.mode = CONFIG_FSL_PMIC_MODE;
-       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)
-       p->interface = PMIC_I2C;
-       p->hw.i2c.addr = CONFIG_SYS_FSL_PMIC_I2C_ADDR;
-       p->hw.i2c.tx_num = 3;
-       p->bus = I2C_PMIC;
-#else
-#error "You must select CONFIG_PMIC_SPI or CONFIG_PMIC_I2C"
-#endif
-
-       return 0;
-}
diff --git a/drivers/misc/pmic_i2c.c b/drivers/misc/pmic_i2c.c
deleted file mode 100644 (file)
index 95a3365..0000000
+++ /dev/null
@@ -1,98 +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>
-#include <i2c.h>
-
-int pmic_reg_write(struct pmic *p, u32 reg, u32 val)
-{
-       unsigned char buf[4] = { 0 };
-
-       if (check_reg(reg))
-               return -1;
-
-       switch (pmic_i2c_tx_num) {
-       case 3:
-               buf[0] = (val >> 16) & 0xff;
-               buf[1] = (val >> 8) & 0xff;
-               buf[2] = val & 0xff;
-               break;
-       case 1:
-               buf[0] = val & 0xff;
-               break;
-       default:
-               printf("%s: invalid tx_num: %d", __func__, pmic_i2c_tx_num);
-               return -1;
-       }
-
-       if (i2c_write(pmic_i2c_addr, reg, 1, buf, pmic_i2c_tx_num))
-               return -1;
-
-       return 0;
-}
-
-int pmic_reg_read(struct pmic *p, u32 reg, u32 *val)
-{
-       unsigned char buf[4] = { 0 };
-       u32 ret_val = 0;
-
-       if (check_reg(reg))
-               return -1;
-
-       if (i2c_read(pmic_i2c_addr, reg, 1, buf, pmic_i2c_tx_num))
-               return -1;
-
-       switch (pmic_i2c_tx_num) {
-       case 3:
-               ret_val = buf[0] << 16 | buf[1] << 8 | buf[2];
-               break;
-       case 1:
-               ret_val = buf[0];
-               break;
-       default:
-               printf("%s: invalid tx_num: %d", __func__, pmic_i2c_tx_num);
-               return -1;
-       }
-       memcpy(val, &ret_val, sizeof(ret_val));
-
-       return 0;
-}
-
-int pmic_probe(struct pmic *p)
-{
-       I2C_SET_BUS(p->bus);
-       debug("PMIC:%s probed!\n", p->name);
-       if (i2c_probe(pmic_i2c_addr)) {
-               printf("Can't find PMIC:%s\n", p->name);
-               return -1;
-       }
-
-       return 0;
-}
diff --git a/drivers/misc/pmic_max8997.c b/drivers/misc/pmic_max8997.c
deleted file mode 100644 (file)
index 62dbc05..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- *  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 <pmic.h>
-#include <max8997_pmic.h>
-
-int pmic_init(void)
-{
-       struct pmic *p = get_pmic();
-       static const char name[] = "MAX8997_PMIC";
-
-       puts("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 = I2C_PMIC;
-
-       return 0;
-}
diff --git a/drivers/misc/pmic_max8998.c b/drivers/misc/pmic_max8998.c
deleted file mode 100644 (file)
index cc69fd7..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- *  Copyright (C) 2011 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 <pmic.h>
-#include <max8998_pmic.h>
-
-int pmic_init(void)
-{
-       struct pmic *p = get_pmic();
-       static const char name[] = "MAX8998_PMIC";
-
-       puts("Board PMIC init\n");
-
-       p->name = name;
-       p->interface = PMIC_I2C;
-       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;
-
-       return 0;
-}
diff --git a/drivers/misc/pmic_spi.c b/drivers/misc/pmic_spi.c
deleted file mode 100644 (file)
index 5a0dd22..0000000
+++ /dev/null
@@ -1,108 +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>
-#include <spi.h>
-
-static struct spi_slave *slave;
-
-void pmic_spi_free(struct spi_slave *slave)
-{
-       if (slave)
-               spi_free_slave(slave);
-}
-
-struct spi_slave *pmic_spi_probe(struct pmic *p)
-{
-       return spi_setup_slave(p->bus,
-               p->hw.spi.cs,
-               p->hw.spi.clk,
-               p->hw.spi.mode);
-}
-
-static u32 pmic_reg(struct pmic *p, u32 reg, u32 *val, u32 write)
-{
-       u32 pmic_tx, pmic_rx;
-       u32 tmp;
-
-       if (!slave) {
-               slave = pmic_spi_probe(p);
-
-               if (!slave)
-                       return -1;
-       }
-
-       if (check_reg(reg))
-               return -1;
-
-       if (spi_claim_bus(slave))
-               return -1;
-
-       pmic_tx = p->hw.spi.prepare_tx(reg, val, write);
-
-       tmp = cpu_to_be32(pmic_tx);
-
-       if (spi_xfer(slave, pmic_spi_bitlen, &tmp, &pmic_rx,
-                       pmic_spi_flags)) {
-               spi_release_bus(slave);
-               return -1;
-       }
-
-       if (write) {
-               pmic_tx = p->hw.spi.prepare_tx(reg, val, 0);
-               tmp = cpu_to_be32(pmic_tx);
-               if (spi_xfer(slave, pmic_spi_bitlen, &tmp, &pmic_rx,
-                       pmic_spi_flags)) {
-                       spi_release_bus(slave);
-                       return -1;
-               }
-       }
-
-       spi_release_bus(slave);
-       *val = cpu_to_be32(pmic_rx);
-
-       return 0;
-}
-
-int pmic_reg_write(struct pmic *p, u32 reg, u32 val)
-{
-       if (pmic_reg(p, reg, &val, 1))
-               return -1;
-
-       return 0;
-}
-
-int pmic_reg_read(struct pmic *p, u32 reg, u32 *val)
-{
-       if (pmic_reg(p, reg, val, 0))
-               return -1;
-
-       return 0;
-}
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)
 
diff --git a/drivers/power/battery/Makefile b/drivers/power/battery/Makefile
new file mode 100644 (file)
index 0000000..b176701
--- /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)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;
+}
diff --git a/drivers/power/pmic/pmic_max8998.c b/drivers/power/pmic/pmic_max8998.c
new file mode 100644 (file)
index 0000000..452e1c8
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ *  Copyright (C) 2011 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/max8998_pmic.h>
+#include <errno.h>
+
+int pmic_init(unsigned char bus)
+{
+       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");
+
+       p->name = name;
+       p->interface = PMIC_I2C;
+       p->number_of_regs = PMIC_NUM_OF_REGS;
+       p->hw.i2c.addr = MAX8998_I2C_ADDR;
+       p->hw.i2c.tx_num = 1;
+       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"
+);
diff --git a/drivers/power/power_dialog.c b/drivers/power/power_dialog.c
new file mode 100644 (file)
index 0000000..d7ebd15
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ *  Copyright (C) 2011 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.
+ */
+
+#include <common.h>
+#include <power/pmic.h>
+#include <dialog_pmic.h>
+#include <errno.h>
+
+int pmic_dialog_init(unsigned char bus)
+{
+       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;
+
+       p->interface = PMIC_I2C;
+       p->hw.i2c.addr = CONFIG_SYS_DIALOG_PMIC_I2C_ADDR;
+       p->hw.i2c.tx_num = 1;
+       p->bus = bus;
+
+       return 0;
+}
diff --git a/drivers/power/power_fsl.c b/drivers/power/power_fsl.c
new file mode 100644 (file)
index 0000000..651f88f
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ *  Copyright (C) 2011 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 <spi.h>
+#include <power/pmic.h>
+#include <fsl_pmic.h>
+#include <errno.h>
+
+#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(unsigned char bus)
+{
+       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_POWER_SPI)
+       p->interface = PMIC_SPI;
+       p->bus = CONFIG_FSL_PMIC_BUS;
+       p->hw.spi.cs = CONFIG_FSL_PMIC_CS;
+       p->hw.spi.clk = CONFIG_FSL_PMIC_CLK;
+       p->hw.spi.mode = CONFIG_FSL_PMIC_MODE;
+       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_POWER_I2C)
+       p->interface = PMIC_I2C;
+       p->hw.i2c.addr = CONFIG_SYS_FSL_PMIC_I2C_ADDR;
+       p->hw.i2c.tx_num = 3;
+       p->bus = bus;
+#else
+#error "You must select CONFIG_POWER_SPI or CONFIG_PMIC_I2C"
+#endif
+
+       return 0;
+}
diff --git a/drivers/power/power_i2c.c b/drivers/power/power_i2c.c
new file mode 100644 (file)
index 0000000..3e5a784
--- /dev/null
@@ -0,0 +1,125 @@
+/*
+ * 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 <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(p, reg))
+               return -1;
+
+       switch (pmic_i2c_tx_num) {
+       case 3:
+               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] = cpu_to_le32(val) & 0xff;
+               break;
+       default:
+               printf("%s: invalid tx_num: %d", __func__, pmic_i2c_tx_num);
+               return -1;
+       }
+
+       if (i2c_write(pmic_i2c_addr, reg, 1, buf, pmic_i2c_tx_num))
+               return -1;
+
+       return 0;
+}
+
+int pmic_reg_read(struct pmic *p, u32 reg, u32 *val)
+{
+       unsigned char buf[4] = { 0 };
+       u32 ret_val = 0;
+
+       if (check_reg(p, reg))
+               return -1;
+
+       if (i2c_read(pmic_i2c_addr, reg, 1, buf, pmic_i2c_tx_num))
+               return -1;
+
+       switch (pmic_i2c_tx_num) {
+       case 3:
+               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 = le32_to_cpu(buf[0]);
+               break;
+       default:
+               printf("%s: invalid tx_num: %d", __func__, pmic_i2c_tx_num);
+               return -1;
+       }
+       memcpy(val, &ret_val, sizeof(ret_val));
+
+       return 0;
+}
+
+int pmic_probe(struct pmic *p)
+{
+       I2C_SET_BUS(p->bus);
+       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;
+       }
+
+       return 0;
+}
diff --git a/drivers/power/power_spi.c b/drivers/power/power_spi.c
new file mode 100644 (file)
index 0000000..27488ea
--- /dev/null
@@ -0,0 +1,108 @@
+/*
+ * 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 <power/pmic.h>
+#include <spi.h>
+
+static struct spi_slave *slave;
+
+void pmic_spi_free(struct spi_slave *slave)
+{
+       if (slave)
+               spi_free_slave(slave);
+}
+
+struct spi_slave *pmic_spi_probe(struct pmic *p)
+{
+       return spi_setup_slave(p->bus,
+               p->hw.spi.cs,
+               p->hw.spi.clk,
+               p->hw.spi.mode);
+}
+
+static u32 pmic_reg(struct pmic *p, u32 reg, u32 *val, u32 write)
+{
+       u32 pmic_tx, pmic_rx;
+       u32 tmp;
+
+       if (!slave) {
+               slave = pmic_spi_probe(p);
+
+               if (!slave)
+                       return -1;
+       }
+
+       if (check_reg(p, reg))
+               return -1;
+
+       if (spi_claim_bus(slave))
+               return -1;
+
+       pmic_tx = p->hw.spi.prepare_tx(reg, val, write);
+
+       tmp = cpu_to_be32(pmic_tx);
+
+       if (spi_xfer(slave, pmic_spi_bitlen, &tmp, &pmic_rx,
+                       pmic_spi_flags)) {
+               spi_release_bus(slave);
+               return -1;
+       }
+
+       if (write) {
+               pmic_tx = p->hw.spi.prepare_tx(reg, val, 0);
+               tmp = cpu_to_be32(pmic_tx);
+               if (spi_xfer(slave, pmic_spi_bitlen, &tmp, &pmic_rx,
+                       pmic_spi_flags)) {
+                       spi_release_bus(slave);
+                       return -1;
+               }
+       }
+
+       spi_release_bus(slave);
+       *val = cpu_to_be32(pmic_rx);
+
+       return 0;
+}
+
+int pmic_reg_write(struct pmic *p, u32 reg, u32 val)
+{
+       if (pmic_reg(p, reg, &val, 1))
+               return -1;
+
+       return 0;
+}
+
+int pmic_reg_read(struct pmic *p, u32 reg, u32 *val)
+{
+       if (pmic_reg(p, reg, val, 0))
+               return -1;
+
+       return 0;
+}
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);
index beb7fa396ea94dc60a071aa3b9ce70241b268798..b10ca4b67719b33368b540ef941e4e09ffd8349f 100644 (file)
@@ -51,6 +51,18 @@ short console_row;
 #define lcdc_readl(reg)                __raw_readl((reg))
 #define lcdc_writel(reg, val)  __raw_writel((val), (reg))
 
+/*
+ * the CLUT register map as following
+ * RCLUT(24 ~ 16), GCLUT(15 ~ 8), BCLUT(7 ~ 0)
+ */
+void lcd_setcolreg(ushort regno, ushort red, ushort green, ushort blue)
+{
+       lcdc_writel(((red << LCDC_BASECLUT_RCLUT_Pos) & LCDC_BASECLUT_RCLUT_Msk)
+               | ((green << LCDC_BASECLUT_GCLUT_Pos) & LCDC_BASECLUT_GCLUT_Msk)
+               | ((blue << LCDC_BASECLUT_BCLUT_Pos) & LCDC_BASECLUT_BCLUT_Msk),
+               panel_info.mmio + ATMEL_LCDC_LUT(regno));
+}
+
 void lcd_ctrl_init(void *lcdbase)
 {
        unsigned long value;
index 9c4714d50a5a444aa7128f08805163f385994270..a0607cf433660d143acebe51846d48601d8bca8b 100644 (file)
@@ -153,7 +153,7 @@ int vcxk_init(unsigned long width, unsigned long height)
 #ifdef CONFIG_SYS_VCXK_DOUBLEBUFFERED
        double_bws_word  = (u_short *)double_bws;
        double_bws_long  = (u_long *)double_bws;
-       debug("%lx %lx %lx \n", double_bws, double_bws_word, double_bws_long);
+       debug("%px %px %px\n", double_bws, double_bws_word, double_bws_long);
 #endif
        display_width  = width;
        display_height = height;
index 9c67b63bf4504e2345f733a9cec5485a7f52be69..9388859da7e07f52ca324adfabdd49f9fbadbe08 100644 (file)
@@ -1515,6 +1515,13 @@ int video_display_bitmap(ulong bmp_image, int x, int y)
 
        padded_line = (((width * bpp + 7) / 8) + 3) & ~0x3;
 
+       /*
+        * Just ignore elements which are completely beyond screen
+        * dimensions.
+        */
+       if ((x >= VIDEO_VISIBLE_COLS) || (y >= VIDEO_VISIBLE_ROWS))
+               return 0;
+
 #ifdef CONFIG_SPLASH_SCREEN_ALIGN
        if (x == BMP_ALIGN_CENTER)
                x = max(0, (VIDEO_VISIBLE_COLS - width) / 2);
@@ -2257,3 +2264,45 @@ int drv_video_init(void)
        /* Return success */
        return 1;
 }
+
+void video_position_cursor(unsigned col, unsigned row)
+{
+       console_col = min(col, CONSOLE_COLS - 1);
+       console_row = min(row, CONSOLE_ROWS - 1);
+}
+
+int video_get_pixel_width(void)
+{
+       return VIDEO_VISIBLE_COLS;
+}
+
+int video_get_pixel_height(void)
+{
+       return VIDEO_VISIBLE_ROWS;
+}
+
+int video_get_screen_rows(void)
+{
+       return CONSOLE_ROWS;
+}
+
+int video_get_screen_columns(void)
+{
+       return CONSOLE_COLS;
+}
+
+void video_clear(void)
+{
+#ifdef VIDEO_HW_RECTFILL
+       video_hw_rectfill(VIDEO_PIXEL_SIZE,     /* bytes per pixel */
+                         0,                    /* dest pos x */
+                         0,                    /* dest pos y */
+                         VIDEO_VISIBLE_COLS,   /* frame width */
+                         VIDEO_VISIBLE_ROWS,   /* frame height */
+                         bgx                   /* fill color */
+       );
+#else
+       memsetl(video_fb_address,
+               (VIDEO_VISIBLE_ROWS * VIDEO_LINE_LEN) / sizeof(int), bgx);
+#endif
+}
index 0f2d113a6f18d0e2ecc32eb00b2f13ad6d7454a1..ad4af5283a97d2985f39443c0e5053000fb7bca2 100644 (file)
@@ -94,6 +94,7 @@ struct ipu_ch_param {
        temp1; \
 })
 
+#define IPU_SW_RST_TOUT_USEC   (10000)
 
 void clk_enable(struct clk *clk)
 {
@@ -398,11 +399,20 @@ void ipu_reset(void)
 {
        u32 *reg;
        u32 value;
+       int timeout = IPU_SW_RST_TOUT_USEC;
 
        reg = (u32 *)SRC_BASE_ADDR;
        value = __raw_readl(reg);
        value = value | SW_IPU_RST;
        __raw_writel(value, reg);
+
+       while (__raw_readl(reg) & SW_IPU_RST) {
+               udelay(1);
+               if (!(timeout--)) {
+                       printf("ipu software reset timeout\n");
+                       break;
+               }
+       };
 }
 
 /*
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 945b30acb01b1969b56ddceba7d2c45394935da7..fbd2f92457e18239fccd460c7e1830a765995e4f 100644 (file)
@@ -217,6 +217,13 @@ struct atmel_hlcd_regs {
 #define LCDC_BASECFG3_RDEF(value) \
        ((LCDC_BASECFG3_RDEF_Msk & ((value) << LCDC_BASECFG3_RDEF_Pos)))
 
+#define LCDC_BASECLUT_BCLUT_Pos 0
+#define LCDC_BASECLUT_BCLUT_Msk (0xff << LCDC_BASECLUT_BCLUT_Pos)
+#define LCDC_BASECLUT_GCLUT_Pos 8
+#define LCDC_BASECLUT_GCLUT_Msk (0xff << LCDC_BASECLUT_GCLUT_Pos)
+#define LCDC_BASECLUT_RCLUT_Pos 16
+#define LCDC_BASECLUT_RCLUT_Msk (0xff << LCDC_BASECLUT_RCLUT_Pos)
+
 #define LCDC_BASECFG4_DMA      (0x1 << 8)
 #define LCDC_BASECFG4_REP      (0x1 << 9)
 
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 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 42070d76366e8465a84baf3e90a7e95bff429a62..2517d39d4144a5f3d760c9bcb53029b3460c4316 100644 (file)
@@ -294,6 +294,42 @@ void       lcd_printf      (const char *fmt, ...);
 void   lcd_clear(void);
 int    lcd_display_bitmap(ulong bmp_image, int x, int y);
 
+/**
+ * Get the width of the LCD in pixels
+ *
+ * @return width of LCD in pixels
+ */
+int lcd_get_pixel_width(void);
+
+/**
+ * Get the height of the LCD in pixels
+ *
+ * @return height of LCD in pixels
+ */
+int lcd_get_pixel_height(void);
+
+/**
+ * Get the number of text lines/rows on the LCD
+ *
+ * @return number of rows
+ */
+int lcd_get_screen_rows(void);
+
+/**
+ * Get the number of text columns on the LCD
+ *
+ * @return number of columns
+ */
+int lcd_get_screen_columns(void);
+
+/**
+ * Set the position of the text cursor
+ *
+ * @param col  Column to place cursor (0 = left side)
+ * @param row  Row to place cursor (0 = top line)
+ */
+void lcd_position_cursor(unsigned col, unsigned row);
+
 /* Allow boards to customize the information displayed */
 void lcd_show_board_info(void);
 
diff --git a/include/max8997_pmic.h b/include/max8997_pmic.h
deleted file mode 100644 (file)
index 17ae24e..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- *  Copyright (C) 2011 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_PMIC_H_
-#define __MAX8997_PMIC_H_
-
-/* MAX 8997 registers */
-enum {
-       MAX8997_REG_PMIC_ID0    = 0x00,
-       MAX8997_REG_PMIC_ID1    = 0x01,
-       MAX8997_REG_INTSRC      = 0x02,
-       MAX8997_REG_INT1        = 0x03,
-       MAX8997_REG_INT2        = 0x04,
-       MAX8997_REG_INT3        = 0x05,
-       MAX8997_REG_INT4        = 0x06,
-
-       MAX8997_REG_INT1MSK     = 0x08,
-       MAX8997_REG_INT2MSK     = 0x09,
-       MAX8997_REG_INT3MSK     = 0x0a,
-       MAX8997_REG_INT4MSK     = 0x0b,
-
-       MAX8997_REG_STATUS1     = 0x0d,
-       MAX8997_REG_STATUS2     = 0x0e,
-       MAX8997_REG_STATUS3     = 0x0f,
-       MAX8997_REG_STATUS4     = 0x10,
-
-       MAX8997_REG_MAINCON1    = 0x13,
-       MAX8997_REG_MAINCON2    = 0x14,
-       MAX8997_REG_BUCKRAMP    = 0x15,
-
-       MAX8997_REG_BUCK1CTRL   = 0x18,
-       MAX8997_REG_BUCK1DVS1   = 0x19,
-       MAX8997_REG_BUCK1DVS2   = 0x1a,
-       MAX8997_REG_BUCK1DVS3   = 0x1b,
-       MAX8997_REG_BUCK1DVS4   = 0x1c,
-       MAX8997_REG_BUCK1DVS5   = 0x1d,
-       MAX8997_REG_BUCK1DVS6   = 0x1e,
-       MAX8997_REG_BUCK1DVS7   = 0x1f,
-       MAX8997_REG_BUCK1DVS8   = 0x20,
-       MAX8997_REG_BUCK2CTRL   = 0x21,
-       MAX8997_REG_BUCK2DVS1   = 0x22,
-       MAX8997_REG_BUCK2DVS2   = 0x23,
-       MAX8997_REG_BUCK2DVS3   = 0x24,
-       MAX8997_REG_BUCK2DVS4   = 0x25,
-       MAX8997_REG_BUCK2DVS5   = 0x26,
-       MAX8997_REG_BUCK2DVS6   = 0x27,
-       MAX8997_REG_BUCK2DVS7   = 0x28,
-       MAX8997_REG_BUCK2DVS8   = 0x29,
-       MAX8997_REG_BUCK3CTRL   = 0x2a,
-       MAX8997_REG_BUCK3DVS    = 0x2b,
-       MAX8997_REG_BUCK4CTRL   = 0x2c,
-       MAX8997_REG_BUCK4DVS    = 0x2d,
-       MAX8997_REG_BUCK5CTRL   = 0x2e,
-       MAX8997_REG_BUCK5DVS1   = 0x2f,
-       MAX8997_REG_BUCK5DVS2   = 0x30,
-       MAX8997_REG_BUCK5DVS3   = 0x31,
-       MAX8997_REG_BUCK5DVS4   = 0x32,
-       MAX8997_REG_BUCK5DVS5   = 0x33,
-       MAX8997_REG_BUCK5DVS6   = 0x34,
-       MAX8997_REG_BUCK5DVS7   = 0x35,
-       MAX8997_REG_BUCK5DVS8   = 0x36,
-       MAX8997_REG_BUCK6CTRL   = 0x37,
-       MAX8997_REG_BUCK6BPSKIPCTRL     = 0x38,
-       MAX8997_REG_BUCK7CTRL   = 0x39,
-       MAX8997_REG_BUCK7DVS    = 0x3a,
-       MAX8997_REG_LDO1CTRL    = 0x3b,
-       MAX8997_REG_LDO2CTRL    = 0x3c,
-       MAX8997_REG_LDO3CTRL    = 0x3d,
-       MAX8997_REG_LDO4CTRL    = 0x3e,
-       MAX8997_REG_LDO5CTRL    = 0x3f,
-       MAX8997_REG_LDO6CTRL    = 0x40,
-       MAX8997_REG_LDO7CTRL    = 0x41,
-       MAX8997_REG_LDO8CTRL    = 0x42,
-       MAX8997_REG_LDO9CTRL    = 0x43,
-       MAX8997_REG_LDO10CTRL   = 0x44,
-       MAX8997_REG_LDO11CTRL   = 0x45,
-       MAX8997_REG_LDO12CTRL   = 0x46,
-       MAX8997_REG_LDO13CTRL   = 0x47,
-       MAX8997_REG_LDO14CTRL   = 0x48,
-       MAX8997_REG_LDO15CTRL   = 0x49,
-       MAX8997_REG_LDO16CTRL   = 0x4a,
-       MAX8997_REG_LDO17CTRL   = 0x4b,
-       MAX8997_REG_LDO18CTRL   = 0x4c,
-       MAX8997_REG_LDO21CTRL   = 0x4d,
-
-       MAX8997_REG_MBCCTRL1    = 0x50,
-       MAX8997_REG_MBCCTRL2    = 0x51,
-       MAX8997_REG_MBCCTRL3    = 0x52,
-       MAX8997_REG_MBCCTRL4    = 0x53,
-       MAX8997_REG_MBCCTRL5    = 0x54,
-       MAX8997_REG_MBCCTRL6    = 0x55,
-       MAX8997_REG_OTPCGHCVS   = 0x56,
-
-       MAX8997_REG_SAFEOUTCTRL = 0x5a,
-
-       MAX8997_REG_LBCNFG1     = 0x5e,
-       MAX8997_REG_LBCNFG2     = 0x5f,
-       MAX8997_REG_BBCCTRL     = 0x60,
-
-       MAX8997_REG_FLASH1_CUR  = 0x63, /* 0x63 ~ 0x6e for FLASH */
-       MAX8997_REG_FLASH2_CUR  = 0x64,
-       MAX8997_REG_MOVIE_CUR   = 0x65,
-       MAX8997_REG_GSMB_CUR    = 0x66,
-       MAX8997_REG_BOOST_CNTL  = 0x67,
-       MAX8997_REG_LEN_CNTL    = 0x68,
-       MAX8997_REG_FLASH_CNTL  = 0x69,
-       MAX8997_REG_WDT_CNTL    = 0x6a,
-       MAX8997_REG_MAXFLASH1   = 0x6b,
-       MAX8997_REG_MAXFLASH2   = 0x6c,
-       MAX8997_REG_FLASHSTATUS = 0x6d,
-       MAX8997_REG_FLASHSTATUSMASK     = 0x6e,
-
-       MAX8997_REG_GPIOCNTL1   = 0x70,
-       MAX8997_REG_GPIOCNTL2   = 0x71,
-       MAX8997_REG_GPIOCNTL3   = 0x72,
-       MAX8997_REG_GPIOCNTL4   = 0x73,
-       MAX8997_REG_GPIOCNTL5   = 0x74,
-       MAX8997_REG_GPIOCNTL6   = 0x75,
-       MAX8997_REG_GPIOCNTL7   = 0x76,
-       MAX8997_REG_GPIOCNTL8   = 0x77,
-       MAX8997_REG_GPIOCNTL9   = 0x78,
-       MAX8997_REG_GPIOCNTL10  = 0x79,
-       MAX8997_REG_GPIOCNTL11  = 0x7a,
-       MAX8997_REG_GPIOCNTL12  = 0x7b,
-
-       MAX8997_REG_LDO1CONFIG  = 0x80,
-       MAX8997_REG_LDO2CONFIG  = 0x81,
-       MAX8997_REG_LDO3CONFIG  = 0x82,
-       MAX8997_REG_LDO4CONFIG  = 0x83,
-       MAX8997_REG_LDO5CONFIG  = 0x84,
-       MAX8997_REG_LDO6CONFIG  = 0x85,
-       MAX8997_REG_LDO7CONFIG  = 0x86,
-       MAX8997_REG_LDO8CONFIG  = 0x87,
-       MAX8997_REG_LDO9CONFIG  = 0x88,
-       MAX8997_REG_LDO10CONFIG = 0x89,
-       MAX8997_REG_LDO11CONFIG = 0x8a,
-       MAX8997_REG_LDO12CONFIG = 0x8b,
-       MAX8997_REG_LDO13CONFIG = 0x8c,
-       MAX8997_REG_LDO14CONFIG = 0x8d,
-       MAX8997_REG_LDO15CONFIG = 0x8e,
-       MAX8997_REG_LDO16CONFIG = 0x8f,
-       MAX8997_REG_LDO17CONFIG = 0x90,
-       MAX8997_REG_LDO18CONFIG = 0x91,
-       MAX8997_REG_LDO21CONFIG = 0x92,
-
-       MAX8997_REG_DVSOKTIMER1 = 0x97,
-       MAX8997_REG_DVSOKTIMER2 = 0x98,
-       MAX8997_REG_DVSOKTIMER4 = 0x99,
-       MAX8997_REG_DVSOKTIMER5 = 0x9a,
-
-       PMIC_NUM_OF_REGS = 0x9b,
-};
-
-#define ENSAFEOUT1 (1 << 6)
-#define ENSAFEOUT2 (1 << 7)
-
-#define MAX8997_I2C_ADDR        (0xCC >> 1)
-#define MAX8997_RTC_ADDR       (0x0C >> 1)
-#define MAX8997_MUIC_ADDR      (0x4A >> 1)
-#define MAX8997_FG_ADDR        (0x6C >> 1)
-
-enum {
-       LDO_OFF = 0,
-       LDO_ON = 1,
-
-       DIS_LDO = (0x00 << 6),
-       EN_LDO = (0x3 << 6),
-};
-
-#endif /* __MAX8997_PMIC_H_ */
diff --git a/include/max8998_pmic.h b/include/max8998_pmic.h
deleted file mode 100644 (file)
index ca21f88..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- *  Copyright (C) 2011 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 __MAX8998_PMIC_H_
-#define __MAX8998_PMIC_H_
-
-/* MAX 8998 registers */
-enum {
-       MAX8998_REG_IRQ1,
-       MAX8998_REG_IRQ2,
-       MAX8998_REG_IRQ3,
-       MAX8998_REG_IRQ4,
-       MAX8998_REG_IRQM1,
-       MAX8998_REG_IRQM2,
-       MAX8998_REG_IRQM3,
-       MAX8998_REG_IRQM4,
-       MAX8998_REG_STATUS1,
-       MAX8998_REG_STATUS2,
-       MAX8998_REG_STATUSM1,
-       MAX8998_REG_STATUSM2,
-       MAX8998_REG_CHGR1,
-       MAX8998_REG_CHGR2,
-       MAX8998_REG_LDO_ACTIVE_DISCHARGE1,
-       MAX8998_REG_LDO_ACTIVE_DISCHARGE2,
-       MAX8998_REG_BUCK_ACTIVE_DISCHARGE3,
-       MAX8998_REG_ONOFF1,
-       MAX8998_REG_ONOFF2,
-       MAX8998_REG_ONOFF3,
-       MAX8998_REG_ONOFF4,
-       MAX8998_REG_BUCK1_VOLTAGE1,
-       MAX8998_REG_BUCK1_VOLTAGE2,
-       MAX8998_REG_BUCK1_VOLTAGE3,
-       MAX8998_REG_BUCK1_VOLTAGE4,
-       MAX8998_REG_BUCK2_VOLTAGE1,
-       MAX8998_REG_BUCK2_VOLTAGE2,
-       MAX8998_REG_BUCK3,
-       MAX8998_REG_BUCK4,
-       MAX8998_REG_LDO2_LDO3,
-       MAX8998_REG_LDO4,
-       MAX8998_REG_LDO5,
-       MAX8998_REG_LDO6,
-       MAX8998_REG_LDO7,
-       MAX8998_REG_LDO8_LDO9,
-       MAX8998_REG_LDO10_LDO11,
-       MAX8998_REG_LDO12,
-       MAX8998_REG_LDO13,
-       MAX8998_REG_LDO14,
-       MAX8998_REG_LDO15,
-       MAX8998_REG_LDO16,
-       MAX8998_REG_LDO17,
-       MAX8998_REG_BKCHR,
-       MAX8998_REG_LBCNFG1,
-       MAX8998_REG_LBCNFG2,
-       PMIC_NUM_OF_REGS,
-};
-
-#define MAX8998_LDO3           (1 << 2)
-#define MAX8998_LDO4           (1 << 1)
-#define MAX8998_LDO8           (1 << 5)
-#define MAX8998_SAFEOUT1       (1 << 4)
-
-#define MAX8998_I2C_ADDR        (0xCC >> 1)
-
-enum { LDO_OFF, LDO_ON };
-
-#endif /* __MAX8998_PMIC_H_ */
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
diff --git a/include/pmic.h b/include/pmic.h
deleted file mode 100644 (file)
index 6a05b40..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- *  Copyright (C) 2011 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 __CORE_PMIC_H_
-#define __CORE_PMIC_H_
-
-enum { PMIC_I2C, PMIC_SPI, };
-enum { I2C_PMIC, I2C_NUM, };
-enum { PMIC_READ, PMIC_WRITE, };
-
-struct p_i2c {
-       unsigned char addr;
-       unsigned char *buf;
-       unsigned char tx_num;
-};
-
-struct p_spi {
-       unsigned int cs;
-       unsigned int mode;
-       unsigned int bitlen;
-       unsigned int clk;
-       unsigned int flags;
-       u32 (*prepare_tx)(u32 reg, u32 *val, u32 write);
-};
-
-struct pmic {
-       const char *name;
-       unsigned char bus;
-       unsigned char interface;
-       unsigned char number_of_regs;
-       union hw {
-               struct p_i2c i2c;
-               struct p_spi spi;
-       } hw;
-};
-
-int pmic_init(void);
-int pmic_dialog_init(void);
-int check_reg(u32 reg);
-struct pmic *get_pmic(void);
-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);
-int pmic_set_output(struct pmic *p, u32 reg, int ldo, int on);
-
-#define pmic_i2c_addr (p->hw.i2c.addr)
-#define pmic_i2c_tx_num (p->hw.i2c.tx_num)
-
-#define pmic_spi_bitlen (p->hw.spi.bitlen)
-#define pmic_spi_flags (p->hw.spi.flags)
-
-#endif /* __CORE_PMIC_H_ */
diff --git a/include/power/battery.h b/include/power/battery.h
new file mode 100644 (file)
index 0000000..e2fec68
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ *  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 __POWER_BATTERY_H_
+#define __POWER_BATTERY_H_
+
+struct battery {
+       unsigned int version;
+       unsigned int state_of_chrg;
+       unsigned int time_to_empty;
+       unsigned int capacity;
+       unsigned int voltage_uV;
+
+       unsigned int state;
+};
+
+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_ */
diff --git a/include/power/max8997_pmic.h b/include/power/max8997_pmic.h
new file mode 100644 (file)
index 0000000..5d2d94d
--- /dev/null
@@ -0,0 +1,214 @@
+/*
+ *  Copyright (C) 2011 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_PMIC_H_
+#define __MAX8997_PMIC_H_
+
+/* MAX 8997 registers */
+enum {
+       MAX8997_REG_PMIC_ID0    = 0x00,
+       MAX8997_REG_PMIC_ID1    = 0x01,
+       MAX8997_REG_INTSRC      = 0x02,
+       MAX8997_REG_INT1        = 0x03,
+       MAX8997_REG_INT2        = 0x04,
+       MAX8997_REG_INT3        = 0x05,
+       MAX8997_REG_INT4        = 0x06,
+
+       MAX8997_REG_INT1MSK     = 0x08,
+       MAX8997_REG_INT2MSK     = 0x09,
+       MAX8997_REG_INT3MSK     = 0x0a,
+       MAX8997_REG_INT4MSK     = 0x0b,
+
+       MAX8997_REG_STATUS1     = 0x0d,
+       MAX8997_REG_STATUS2     = 0x0e,
+       MAX8997_REG_STATUS3     = 0x0f,
+       MAX8997_REG_STATUS4     = 0x10,
+
+       MAX8997_REG_MAINCON1    = 0x13,
+       MAX8997_REG_MAINCON2    = 0x14,
+       MAX8997_REG_BUCKRAMP    = 0x15,
+
+       MAX8997_REG_BUCK1CTRL   = 0x18,
+       MAX8997_REG_BUCK1DVS1   = 0x19,
+       MAX8997_REG_BUCK1DVS2   = 0x1a,
+       MAX8997_REG_BUCK1DVS3   = 0x1b,
+       MAX8997_REG_BUCK1DVS4   = 0x1c,
+       MAX8997_REG_BUCK1DVS5   = 0x1d,
+       MAX8997_REG_BUCK1DVS6   = 0x1e,
+       MAX8997_REG_BUCK1DVS7   = 0x1f,
+       MAX8997_REG_BUCK1DVS8   = 0x20,
+       MAX8997_REG_BUCK2CTRL   = 0x21,
+       MAX8997_REG_BUCK2DVS1   = 0x22,
+       MAX8997_REG_BUCK2DVS2   = 0x23,
+       MAX8997_REG_BUCK2DVS3   = 0x24,
+       MAX8997_REG_BUCK2DVS4   = 0x25,
+       MAX8997_REG_BUCK2DVS5   = 0x26,
+       MAX8997_REG_BUCK2DVS6   = 0x27,
+       MAX8997_REG_BUCK2DVS7   = 0x28,
+       MAX8997_REG_BUCK2DVS8   = 0x29,
+       MAX8997_REG_BUCK3CTRL   = 0x2a,
+       MAX8997_REG_BUCK3DVS    = 0x2b,
+       MAX8997_REG_BUCK4CTRL   = 0x2c,
+       MAX8997_REG_BUCK4DVS    = 0x2d,
+       MAX8997_REG_BUCK5CTRL   = 0x2e,
+       MAX8997_REG_BUCK5DVS1   = 0x2f,
+       MAX8997_REG_BUCK5DVS2   = 0x30,
+       MAX8997_REG_BUCK5DVS3   = 0x31,
+       MAX8997_REG_BUCK5DVS4   = 0x32,
+       MAX8997_REG_BUCK5DVS5   = 0x33,
+       MAX8997_REG_BUCK5DVS6   = 0x34,
+       MAX8997_REG_BUCK5DVS7   = 0x35,
+       MAX8997_REG_BUCK5DVS8   = 0x36,
+       MAX8997_REG_BUCK6CTRL   = 0x37,
+       MAX8997_REG_BUCK6BPSKIPCTRL     = 0x38,
+       MAX8997_REG_BUCK7CTRL   = 0x39,
+       MAX8997_REG_BUCK7DVS    = 0x3a,
+       MAX8997_REG_LDO1CTRL    = 0x3b,
+       MAX8997_REG_LDO2CTRL    = 0x3c,
+       MAX8997_REG_LDO3CTRL    = 0x3d,
+       MAX8997_REG_LDO4CTRL    = 0x3e,
+       MAX8997_REG_LDO5CTRL    = 0x3f,
+       MAX8997_REG_LDO6CTRL    = 0x40,
+       MAX8997_REG_LDO7CTRL    = 0x41,
+       MAX8997_REG_LDO8CTRL    = 0x42,
+       MAX8997_REG_LDO9CTRL    = 0x43,
+       MAX8997_REG_LDO10CTRL   = 0x44,
+       MAX8997_REG_LDO11CTRL   = 0x45,
+       MAX8997_REG_LDO12CTRL   = 0x46,
+       MAX8997_REG_LDO13CTRL   = 0x47,
+       MAX8997_REG_LDO14CTRL   = 0x48,
+       MAX8997_REG_LDO15CTRL   = 0x49,
+       MAX8997_REG_LDO16CTRL   = 0x4a,
+       MAX8997_REG_LDO17CTRL   = 0x4b,
+       MAX8997_REG_LDO18CTRL   = 0x4c,
+       MAX8997_REG_LDO21CTRL   = 0x4d,
+
+       MAX8997_REG_MBCCTRL1    = 0x50,
+       MAX8997_REG_MBCCTRL2    = 0x51,
+       MAX8997_REG_MBCCTRL3    = 0x52,
+       MAX8997_REG_MBCCTRL4    = 0x53,
+       MAX8997_REG_MBCCTRL5    = 0x54,
+       MAX8997_REG_MBCCTRL6    = 0x55,
+       MAX8997_REG_OTPCGHCVS   = 0x56,
+
+       MAX8997_REG_SAFEOUTCTRL = 0x5a,
+
+       MAX8997_REG_LBCNFG1     = 0x5e,
+       MAX8997_REG_LBCNFG2     = 0x5f,
+       MAX8997_REG_BBCCTRL     = 0x60,
+
+       MAX8997_REG_FLASH1_CUR  = 0x63, /* 0x63 ~ 0x6e for FLASH */
+       MAX8997_REG_FLASH2_CUR  = 0x64,
+       MAX8997_REG_MOVIE_CUR   = 0x65,
+       MAX8997_REG_GSMB_CUR    = 0x66,
+       MAX8997_REG_BOOST_CNTL  = 0x67,
+       MAX8997_REG_LEN_CNTL    = 0x68,
+       MAX8997_REG_FLASH_CNTL  = 0x69,
+       MAX8997_REG_WDT_CNTL    = 0x6a,
+       MAX8997_REG_MAXFLASH1   = 0x6b,
+       MAX8997_REG_MAXFLASH2   = 0x6c,
+       MAX8997_REG_FLASHSTATUS = 0x6d,
+       MAX8997_REG_FLASHSTATUSMASK     = 0x6e,
+
+       MAX8997_REG_GPIOCNTL1   = 0x70,
+       MAX8997_REG_GPIOCNTL2   = 0x71,
+       MAX8997_REG_GPIOCNTL3   = 0x72,
+       MAX8997_REG_GPIOCNTL4   = 0x73,
+       MAX8997_REG_GPIOCNTL5   = 0x74,
+       MAX8997_REG_GPIOCNTL6   = 0x75,
+       MAX8997_REG_GPIOCNTL7   = 0x76,
+       MAX8997_REG_GPIOCNTL8   = 0x77,
+       MAX8997_REG_GPIOCNTL9   = 0x78,
+       MAX8997_REG_GPIOCNTL10  = 0x79,
+       MAX8997_REG_GPIOCNTL11  = 0x7a,
+       MAX8997_REG_GPIOCNTL12  = 0x7b,
+
+       MAX8997_REG_LDO1CONFIG  = 0x80,
+       MAX8997_REG_LDO2CONFIG  = 0x81,
+       MAX8997_REG_LDO3CONFIG  = 0x82,
+       MAX8997_REG_LDO4CONFIG  = 0x83,
+       MAX8997_REG_LDO5CONFIG  = 0x84,
+       MAX8997_REG_LDO6CONFIG  = 0x85,
+       MAX8997_REG_LDO7CONFIG  = 0x86,
+       MAX8997_REG_LDO8CONFIG  = 0x87,
+       MAX8997_REG_LDO9CONFIG  = 0x88,
+       MAX8997_REG_LDO10CONFIG = 0x89,
+       MAX8997_REG_LDO11CONFIG = 0x8a,
+       MAX8997_REG_LDO12CONFIG = 0x8b,
+       MAX8997_REG_LDO13CONFIG = 0x8c,
+       MAX8997_REG_LDO14CONFIG = 0x8d,
+       MAX8997_REG_LDO15CONFIG = 0x8e,
+       MAX8997_REG_LDO16CONFIG = 0x8f,
+       MAX8997_REG_LDO17CONFIG = 0x90,
+       MAX8997_REG_LDO18CONFIG = 0x91,
+       MAX8997_REG_LDO21CONFIG = 0x92,
+
+       MAX8997_REG_DVSOKTIMER1 = 0x97,
+       MAX8997_REG_DVSOKTIMER2 = 0x98,
+       MAX8997_REG_DVSOKTIMER4 = 0x99,
+       MAX8997_REG_DVSOKTIMER5 = 0x9a,
+
+       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)
+#define MAX8997_FG_ADDR        (0x6C >> 1)
+
+enum {
+       LDO_OFF = 0,
+       LDO_ON = 1,
+
+       DIS_LDO = (0x00 << 6),
+       EN_LDO = (0x3 << 6),
+};
+
+#define MAX8997_LDO_MAX_VAL 0x3F
+unsigned char max8997_reg_ldo(int uV);
+#endif /* __MAX8997_PMIC_H_ */
diff --git a/include/power/max8998_pmic.h b/include/power/max8998_pmic.h
new file mode 100644 (file)
index 0000000..ca21f88
--- /dev/null
@@ -0,0 +1,86 @@
+/*
+ *  Copyright (C) 2011 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 __MAX8998_PMIC_H_
+#define __MAX8998_PMIC_H_
+
+/* MAX 8998 registers */
+enum {
+       MAX8998_REG_IRQ1,
+       MAX8998_REG_IRQ2,
+       MAX8998_REG_IRQ3,
+       MAX8998_REG_IRQ4,
+       MAX8998_REG_IRQM1,
+       MAX8998_REG_IRQM2,
+       MAX8998_REG_IRQM3,
+       MAX8998_REG_IRQM4,
+       MAX8998_REG_STATUS1,
+       MAX8998_REG_STATUS2,
+       MAX8998_REG_STATUSM1,
+       MAX8998_REG_STATUSM2,
+       MAX8998_REG_CHGR1,
+       MAX8998_REG_CHGR2,
+       MAX8998_REG_LDO_ACTIVE_DISCHARGE1,
+       MAX8998_REG_LDO_ACTIVE_DISCHARGE2,
+       MAX8998_REG_BUCK_ACTIVE_DISCHARGE3,
+       MAX8998_REG_ONOFF1,
+       MAX8998_REG_ONOFF2,
+       MAX8998_REG_ONOFF3,
+       MAX8998_REG_ONOFF4,
+       MAX8998_REG_BUCK1_VOLTAGE1,
+       MAX8998_REG_BUCK1_VOLTAGE2,
+       MAX8998_REG_BUCK1_VOLTAGE3,
+       MAX8998_REG_BUCK1_VOLTAGE4,
+       MAX8998_REG_BUCK2_VOLTAGE1,
+       MAX8998_REG_BUCK2_VOLTAGE2,
+       MAX8998_REG_BUCK3,
+       MAX8998_REG_BUCK4,
+       MAX8998_REG_LDO2_LDO3,
+       MAX8998_REG_LDO4,
+       MAX8998_REG_LDO5,
+       MAX8998_REG_LDO6,
+       MAX8998_REG_LDO7,
+       MAX8998_REG_LDO8_LDO9,
+       MAX8998_REG_LDO10_LDO11,
+       MAX8998_REG_LDO12,
+       MAX8998_REG_LDO13,
+       MAX8998_REG_LDO14,
+       MAX8998_REG_LDO15,
+       MAX8998_REG_LDO16,
+       MAX8998_REG_LDO17,
+       MAX8998_REG_BKCHR,
+       MAX8998_REG_LBCNFG1,
+       MAX8998_REG_LBCNFG2,
+       PMIC_NUM_OF_REGS,
+};
+
+#define MAX8998_LDO3           (1 << 2)
+#define MAX8998_LDO4           (1 << 1)
+#define MAX8998_LDO8           (1 << 5)
+#define MAX8998_SAFEOUT1       (1 << 4)
+
+#define MAX8998_I2C_ADDR        (0xCC >> 1)
+
+enum { LDO_OFF, LDO_ON };
+
+#endif /* __MAX8998_PMIC_H_ */
diff --git a/include/power/pmic.h b/include/power/pmic.h
new file mode 100644 (file)
index 0000000..1ecfc05
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+ *  Copyright (C) 2011-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 __CORE_PMIC_H_
+#define __CORE_PMIC_H_
+
+#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;
+       unsigned char *buf;
+       unsigned char tx_num;
+};
+
+struct p_spi {
+       unsigned int cs;
+       unsigned int mode;
+       unsigned int bitlen;
+       unsigned int clk;
+       unsigned int flags;
+       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 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(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);
+int pmic_set_output(struct pmic *p, u32 reg, int ldo, int on);
+
+#define pmic_i2c_addr (p->hw.i2c.addr)
+#define pmic_i2c_tx_num (p->hw.i2c.tx_num)
+
+#define pmic_spi_bitlen (p->hw.spi.bitlen)
+#define pmic_spi_flags (p->hw.spi.flags)
+
+#endif /* __CORE_PMIC_H_ */
diff --git a/include/power/power_chrg.h b/include/power/power_chrg.h
new file mode 100644 (file)
index 0000000..24c4cde
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ *  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 __POWER_CHARGER_H_
+#define __POWER_CHARGER_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 9519ceaf98bf1da91404d1aa21df15b1dd667f9e..f7e27f8477b0e5d3c4acae8175b080db88a78eca 100644 (file)
@@ -15,4 +15,52 @@ int  video_init      (void *videobase);
 void   video_putc      (const char c);
 void   video_puts      (const char *s);
 
+/**
+ * Display a BMP format bitmap on the screen
+ *
+ * @param bmp_image    Address of BMP image
+ * @param x            X position to draw image
+ * @param y            Y position to draw image
+ */
+int video_display_bitmap(ulong bmp_image, int x, int y);
+
+/**
+ * Get the width of the screen in pixels
+ *
+ * @return width of screen in pixels
+ */
+int video_get_pixel_width(void);
+
+/**
+ * Get the height of the screen in pixels
+ *
+ * @return height of screen in pixels
+ */
+int video_get_pixel_height(void);
+
+/**
+ * Get the number of text lines/rows on the screen
+ *
+ * @return number of rows
+ */
+int video_get_screen_rows(void);
+
+/**
+ * Get the number of text columns on the screen
+ *
+ * @return number of columns
+ */
+int video_get_screen_columns(void);
+
+/**
+ * Set the position of the text cursor
+ *
+ * @param col  Column to place cursor (0 = left side)
+ * @param row  Row to place cursor (0 = top line)
+ */
+void video_position_cursor(unsigned col, unsigned row);
+
+/* Clear the display */
+void video_clear(void);
+
 #endif
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