zte's code,first commit

Change-Id: I9a04da59e459a9bc0d67f101f700d9d7dc8d681b
diff --git a/boot/common/src/uboot/drivers/misc/zx234500_charger.c b/boot/common/src/uboot/drivers/misc/zx234500_charger.c
new file mode 100644
index 0000000..3889f8e
--- /dev/null
+++ b/boot/common/src/uboot/drivers/misc/zx234500_charger.c
@@ -0,0 +1,214 @@
+/*******************************************************************************

+ * Copyright (C) 2016, ZIXC Corporation.

+ *

+ * File Name:  		zx234500_charger.c

+ * File Mark:

+ * Description:

+ * Others:

+ * Version:       V1.0

+ * Author:

+ * Date:          2013-8-25

+ * History 1:

+ *     Date:

+ *     Version:

+ *     Author:

+ *     Modification:

+ * History 2:

+  ********************************************************************************/

+

+/****************************************************************************

+* 	                                           Include files

+****************************************************************************/

+#include "lcd.h"

+#include "boot_mode.h"

+#include "usb/dwc_otg_driver.h"

+

+#include "charge.h"

+

+

+

+#pragma GCC optimize("O0")

+/****************************************************************************

+* 	                                           Local Macros

+****************************************************************************/

+//#define ZX234500_TEST

+

+

+//³äµçоƬ¸÷¸öÒý½ÅµÄGPIOºÅ

+#if 0

+#define GPIO_CHARGER_EN     199    			//GPIO199

+#define GPIO_CHARGER_INT     11     		//EXT_INIT1/GPIO11

+#define GPIO_CHARGER_STA     189     	//GPIO189

+#define GPIO_CHARGER_CHGIN     191     	//GPIO191

+#define GPIO_CHARGER_CHGTYPE     210     //GPIO190

+#define GPIO_CHARGER_BATTIN      0    	//no support on plat_zx7510

+#define GPIO_CHARGER_M0     208     			//GPIO208

+#define GPIO_CHARGER_M1      209    			//GPIO209

+#define GPIO_CHARGER_INT_irq      49    //irq no

+#endif

+/*

+

+	.EN =55,//GPIO55

+	.INT =11 ,//EXT_INIT1/GPIO11

+	.CHGIN =52 ,//GPIO52

+	.CHGTYPE =53 ,//GPIO53

+	.BATTIN = 0,//no support on plat_zx7510

+	.M0 =49 ,//GPIO49

+	.M1 = 48,//GPIO48

+	.INT_irq = 49,//irq no

+

+*/

+

+/*³õʼ»¯³äµçоƬµÄGPIO*/

+static void charger_gpio_init()

+{

+	gpio_set_reuse(GPIO_CHARGER_EN,0);

+	gpio_direction_output(GPIO_CHARGER_EN,0);

+

+	gpio_set_reuse(GPIO_CHARGER_INT, 1);

+	gpio_direction_input(GPIO_CHARGER_INT);

+

+	gpio_set_reuse(GPIO_CHARGER_CHGIN, 0);

+	gpio_direction_input(GPIO_CHARGER_CHGIN);

+

+	gpio_set_reuse(GPIO_CHARGER_CHGTYPE, 0);

+	gpio_direction_input(GPIO_CHARGER_CHGTYPE);

+

+	//gpio_set_reuse(GPIO_CHARGER_BATTIN, 0);

+	//gpio_direction_input(GPIO_CHARGER_BATTIN);

+

+	gpio_set_reuse(GPIO_CHARGER_STA, 0);

+	gpio_direction_input(GPIO_CHARGER_STA);

+

+	gpio_set_reuse(GPIO_CHARGER_M0, 0);

+	gpio_direction_output(GPIO_CHARGER_M0,1);

+

+	gpio_set_reuse(GPIO_CHARGER_M1, 0);

+	gpio_direction_output(GPIO_CHARGER_M1,1);

+

+	return;

+}

+

+

+//ÉèÖóäµçģʽ

+int32_t	set_charger_mod(enum charger_mode mode)

+{

+    return 0;

+}

+

+

+//ÉèÖóäµçµçÁ÷´óС

+int32_t	charger_set_usb_current(enum charger_current cur)

+{

+	uint8_t tmp = 0;

+

+	switch(cur)

+	{

+

+		case 	CHG_CURRENT_500 ://	= 1, 	 //normal

+		{

+			gpio_set_value(GPIO_CHARGER_M0,1);

+			gpio_set_value(GPIO_CHARGER_M1,1);

+			break;

+		}

+

+		case 	CHG_CURRENT_1500://,		     // zx234500_2000ma

+		{

+			gpio_set_value(GPIO_CHARGER_M0,0);

+			gpio_set_value(GPIO_CHARGER_M1,1);

+			break;

+		}

+

+		case 	CHG_CURRENT_900://,		     // 101

+		{

+			gpio_set_value(GPIO_CHARGER_M0,0);

+			gpio_set_value(GPIO_CHARGER_M1,0);

+			break;

+		}

+

+

+		case 	CHG_CURRENT_800://,		     // 110

+		case 	CHG_CURRENT_USB_SUSPEND://,     // 011

+		case 	CHG_CURRENT_100 ://	= 0,	 // 000  IUSB3 IUSB2 IUSB1

+		case 	CHG_CURRENT_150://,		     // 100

+		case 	CHG_CURRENT_HIGH_IMPEDANCE://,  // 111

+		case 	MAX_CURRENT_SET://              /* 12 */

+		default:

+			return -1;

+	}

+    return 0;

+}

+

+

+

+//Åжϵ±Ç°ÊÇ·ñÓÐPC USB »ò ³äµçÆ÷ ÊÇ·ñ²åÈë

+int detect_usb_online(void)

+{

+    uint8_t status;

+

+	status = gpio_get_value(GPIO_CHARGER_CHGIN);

+	return ((status)? 0 : 1);  // statusµÍ£¬³äµçÆ÷ÔÚ£¬Ôò·µ»Ø1

+}

+

+

+

+//Åжϵ±Ç°ÊÇ·ñ´¦ÓÚ³äµç¹ý³ÌÖÐ

+int charger_is_sustained(void)

+{

+    uint8_t status;

+

+	status = gpio_get_value(GPIO_CHARGER_STA);

+	return ((status)? 0 : 1);  // statusµÍ£¬³äµç½øÐÐÖУ¬Ôò·µ»Ø1

+}

+

+

+

+//¸ù¾Ýµ±Ç°USBÁ¬½ÓÀàÐÍ£¬É趨³äµçµçÁ÷´óС

+void init_charger_current(void)

+{

+    enum plug_in value = DEFAULT;

+

+	//value = tsp_usb_usb_charger();

+

+	if(CHARGER == value){

+		charger_set_usb_current(CHG_CURRENT_1500);

+	}

+	else{

+		charger_set_usb_current(CHG_CURRENT_500);

+	}

+}

+

+

+

+//³õʼ»¯³äµçоƬ£¬²¢É趨³äµçµçÁ÷´óС

+void usb_charger_init(void)

+{

+    //³äµçоƬÏà¹ØGPIO³õʼ»¯

+	charger_gpio_init();

+

+	//ÉèÖÃΪ³äµçģʽΪÕý³£³äµçģʽ

+	set_charger_mod(CHG_MODE_NORMAL);

+

+    //ÉèÖóäµçµçÁ÷

+	init_charger_current();

+#ifdef ZX234500_TEST

+

+

+	{

+		int i=0;

+		i=detect_usb_online();

+		i=charger_is_sustained();

+

+	}

+#endif

+    return;

+}

+

+

+//ÔÝÍ£³äµç

+void usb_charger_suspend(void)

+{

+	//ÉèÖÃΪ³äµçģʽΪÕý³£³äµçģʽ

+	set_charger_mod(CHG_MODE_SUSPENDED);

+}

+