/* * qisda-utils.c * * Copyright 2009 Bookeen/Qisda * * 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. * * 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., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include int charging_source = 3; EXPORT_SYMBOL(charging_source); /* Qisda, ShiYong Lin, 2009/09/10, Detect insertion source {*/ /*Leo*/ int IsWallCharger(void) { /*u32 i=0;*/ /*u32 i=0;*/ u32 read_pin=99;/*, test_pin = 99;*/ udelay(1000); if((readl(S3C2410_GPGDAT)&0x2)==0x2){ s3c2410_gpio_cfgpin(S3C2443_GPH14, S3C2443_GPH14_OUTP); s3c2410_gpio_setpin(S3C2443_GPH14, 1); /* usb power enbale */ s3c2410_gpio_cfgpin(S3C2410_GPD13, S3C2410_GPD13_OUTP); s3c2410_gpio_setpin(S3C2410_GPD13,1); /* usb power enbale */ /* if reset by sleep wakeup, control the retention I/O cell */ if (__raw_readl(S3C_RSTSTAT) & 0x8) __raw_writel(__raw_readl(S3C_RSTCON)|(1<<16), S3C_RSTCON); __raw_writel(__raw_readl(S3C2410_MISCCR)&~(1<<12), S3C2410_MISCCR); __raw_writel(__raw_readl(S3C_PWRCFG)|(1<<4), S3C_PWRCFG); __raw_writel((0<<2)|(1<<0), S3C_URSTCON); udelay(1000); __raw_writel((1<<2)|(0<<0), S3C_URSTCON); __raw_writel((0<<2)|(0<<0), S3C_URSTCON); __raw_writel((0<<3)|(0<<2)|(0<<1)|(0<<0), S3C_PHYCTRL); __raw_writel((1<<31)|(0<<4)|(0<<3)|(0<<2)|(0<<1)|(0<<0), S3C_PHYPWR); __raw_writel((0<<31)|(1<<2)|(1<<1)|(1<<0), S3C_UCLKCON); __raw_writel((1<<31)|(1<<2)|(1<<1)|(1<<0), S3C_UCLKCON); } read_pin = __raw_readl(S3C_UDC_SYS_STATUS_REG)&0x60; if(read_pin !=0x60){ // printk("usb\n"); #if defined(CONFIG_QISDA_E600_EVT2)|| defined(CONFIG_QISDA_QD060N00_DVT1_1) if((readl(S3C2410_GPGDAT) &(1<<1))==0) { if((readl(S3C2410_GPHDAT) &&(1<<11))==0) { printk("3G Module off\n"); s3c2410_gpio_cfgpin(S3C2443_GPH14, S3C2443_GPH14_OUTP); s3c2410_gpio_setpin(S3C2443_GPH14, 0); } __raw_writel((0<<31)|(0<<2)|(1<<1)|(1<<0), S3C_UCLKCON); } #endif #if defined(CONFIG_QISDA_AS090B00_EVT1)||defined(CONFIG_QISDA_AS090B00_EVT1_1)||defined(CONFIG_QISDA_QD090B00_EVT1) if((readl(S3C2410_GPGDAT) &(1<<1))==0) { if((readl(S3C2410_GPHDAT) &(1<<11))==0) { // printk("3G Module off\n"); s3c2410_gpio_cfgpin(S3C2443_GPH14, S3C2443_GPH14_OUTP); s3c2410_gpio_setpin(S3C2443_GPH14, 0); } __raw_writel((0<<31)|(0<<2)|(1<<1)|(1<<0), S3C_UCLKCON); } #endif return 0; } else { // printk("wall charger\n"); #if defined(CONFIG_QISDA_E600_EVT2)||defined(CONFIG_QISDA_QD060N00_DVT1_1) if((readl(S3C2410_GPGDAT) &(1<<1))==0) { s3c2410_gpio_cfgpin(S3C2443_GPH14, S3C2443_GPH14_OUTP); s3c2410_gpio_setpin(S3C2443_GPH14, 0); __raw_writel((0<<31)|(0<<2)|(1<<1)|(1<<0), S3C_UCLKCON); } #endif #if defined(CONFIG_QISDA_AS090B00_EVT1)||defined(CONFIG_QISDA_AS090B00_EVT1_1)||defined(CONFIG_QISDA_QD090B00_EVT1) if((readl(S3C2410_GPGDAT) &(1<<1))==0) { if((readl(S3C2410_GPHDAT) &(1<<11))==0) { s3c2410_gpio_cfgpin(S3C2443_GPH14, S3C2443_GPH14_OUTP); s3c2410_gpio_setpin(S3C2443_GPH14, 0); } __raw_writel((0<<31)|(0<<2)|(1<<1)|(1<<0), S3C_UCLKCON); } #endif return 1; } } /*Leo*/ /* } Qisda, ShiYong Lin, 2009/09/10, Detect insertion source */ EXPORT_SYMBOL(IsWallCharger);