Exemplo n.º 1
0
static int proc_battery_show(struct seq_file *m, void *v)
{
	unsigned short    mV;
	int               raw;
	int               i, mx;
	struct _batt_cap *tbl = &(batt_cap [0]);

	if (pmic_get_voltage(GEN_PURPOSE_AD5, &mV, &raw, 1) == 0) {
	seq_printf (m, "%dmV (%d)  ", mV, raw);
	} else {
		seq_printf (m, "---mV (---)  ");
	}
	mx = sizeof(batt_cap) / sizeof(struct _batt_cap);
	for ( i = 0 ; i < mx ; i++ , tbl++ ) {
		seq_printf (m, " %d:%d", tbl->raw, tbl->cap);
	}

	seq_printf (m, " caution(%d:%d - %d)", batt_cap[BATT_CAP_CAUTION_LEVEL].raw,
		    batt_cap[BATT_CAP_CAUTION_LEVEL].cap, batt_sample.mode_caution);

#ifdef USE_BATTERY_LOW_INTERRUPT
	if (pmic_get_voltage (GEN_PURPOSE_AD2, &mV, &raw, 0) == 0) {
		seq_printf (m, " bpsns:%dmV(%d)", mV, raw);
	} else {
		seq_printf (m, " bpsns:---mV(---)");
	}
#endif /* USE_BATTERY_LOW_INTERRUPT */
#ifdef USE_BATTERY_LOW_POLLING
	seq_printf (m, " shutdown(%d:%d) poll:%dsec",
		    batt_cap[BATT_CAP_SHUTDOWN_LEVEL].raw,
		    batt_cap[BATT_CAP_SHUTDOWN_LEVEL].cap, batt_poll_interval);
#endif /* USE_BATTERY_LOW_POLLING */

	seq_printf (m, "\n");
	return 0;
}
Exemplo n.º 2
0
/*
 * pmic_get_dcinput_voltage (unsigned short *voltage)
 *  rc 0(DCinput OK) / 1(DCinput Low) / -1(error)
 */
int pmic_get_dcinput_voltage (unsigned short *voltage)
{
	unsigned short vv;
	int rc = pmic_get_voltage (GEN_PURPOSE_AD7, &vv, 0, 0);

	if (voltage != 0) {
		*voltage = vv;
	}
	/*
	 * judge DCinput good/low
	 */
	if (rc == 0) {
		if (DCIN_GOOD_VOLT <= vv) {
			rc = 0;		// Good
		} else {
			rc = 1;		// Low
		}
	}
	return rc;
}
Exemplo n.º 3
0
static int  proc_show(struct seq_file *s, void *p)
{
   int i = 0;
   COMMON_VALUE_SET *cur_voltage_list = NULL;
   unsigned int vol_table_size = 0;
   COMMON_RES* cur_channel_res = NULL;

#if 0
    /*PMIC IRQ info*/
    for (i =PMIC_REG_IRQ1;i<PMIC_IRQ_REG_BUTT;i++)
    {
        seq_printf(s, "IRQ STATUS:%d; %0x\n",i,pmuirq_desc.irq_stat_reg_buf[i]);
    }
#endif
    seq_printf(s, "STATUS 0:OFF 1:ON\n");

    /*pmic register power channel info*/
    for(i = BUCK_ID_BEGIN ;i<PMU_CHANNEL_ID_BUTT;i++)
    {
        if(0 == pmic_power_status(i))
        {
              seq_printf(s, "Channel ID:%d  STATUS OFF  VOL %d\n",i, pmic_get_voltage(i));
        }
        else if(1 == pmic_power_status(i))
        {
            seq_printf(s, "Channel ID:%d  STATUS ON  VOL %d\n",i, pmic_get_voltage(i));
        }
         
         udelay(1);
    }

    /*channel voltage list show*/
    for(i = BUCK_ID_BEGIN ;i<LVS_ID_BEGIN;i++)
    {
         int j = 0;

         /*get device res*/
        cur_channel_res = pmic_get_channel_res_by_id(i);
        if (NULL == cur_channel_res)
        {
            continue;
        }
        else if(PMU_CHANNEL_ID_BUTT == (int)cur_channel_res)
        {
            continue;
        }

        cur_voltage_list = &(cur_channel_res->value_set);
        vol_table_size = cur_voltage_list->value_range_num;

        if(0 == vol_table_size)
        {
            continue;
        }

        seq_printf(s, "Channel ID:%d VOL_LIST:\n",i);
        
        for(j= 0;j<vol_table_size;j++)
        {
             seq_printf(s, "%d  ",cur_voltage_list->value_range[j]);
        }

        seq_printf(s, "\n ");
    }
   
   return 0;
}
Exemplo n.º 4
0
/*
 * mc13892_battery_sample (void)
 *  battery volatge sample for average
 *   return  N - sample count
 *   return -1 - error
 */
struct _batt_sample {
    int     mode_caution;		/* mode mormal(0)/caution(1) */
    int     interval;			/* sample interval */
    int     raw;			/* sample raw A/D */
    int     volt;			/* sample volt */
    int     prev_use;			/* previous sample use count */
    int     error;			/* sample error */
    int     update;			/* sample update */
};
static struct _batt_sample batt_sample;
static int                 batt_sample_initialized;
static int                 batt_sample_rate = 60;	/* sample rate (sec) */
static int mc13892_battery_sample (int online, int wait, int force)
{
	int   i, raw, rc;
	int   rdata [5], rcnt, rmin, rmax, rttl, fmin, fmax;

	/*
	 * check sample interval
	 *  mormal - 60sec, caution - 5sec
	 */
	rc = 0;
	if (batt_sample_initialized != 0) {
		if (batt_sample.mode_caution == 0) {
			batt_sample.interval++;
			if ((force == 0) &&
			    (batt_sample.interval < (batt_sample_rate / 5))) {
				/*
				 * not sample timing
				 */
				return rc;
			}
			batt_sample.interval = 0;
		}
	}

	/*
	 * BATT voltage
         *  lowest  (1)   (2)   (3)  highest
         *    *      +- average -+      *    (* ignore)
	 */
	rmin = 0x7fffffff;
	rmax = 0;
	rcnt = 0;
	for ( i = 0 ; i < 5 ; i++ ) {
		if (pmic_get_voltage (GEN_PURPOSE_AD5, 0, &raw, 1) == 0) {
			rdata [rcnt++] = raw;
			if (raw < rmin) {
				rmin = raw;
			} else if (rmax < raw) {
				rmax = raw;
			}
		} else {
			batt_sample.error++;
		}
		if (wait != 0) {
			mdelay ( 10 );	/* 10ms measure interval */
		}
	}
	rttl = 0;
	fmin = 0;
	fmax = 0;
	for ( i = 0 ; i < rcnt ; i++ ) {
		if ((fmin == 0) && (rmin == rdata [i])) {
			fmin++;		/* lowest value ignore */
		} else if ((fmax == 0) && (rmax == rdata [i])) {
			fmax++;		/* highest value ignore */
		} else {
			rttl += rdata [i];
		}
	}
	if (0 < (rcnt - fmin - fmax)) {
		raw = rttl / (rcnt - fmin - fmax);
		batt_sample.update++;
		rc = rcnt;
	} else {
		raw = batt_sample.raw;
		batt_sample.prev_use++;
		rc = -1;
	}

	/*
	 * check BATT use(AC adapter disconnect)
	 *  voltage of BATT use is decrease only.
	 */
	if ((online == 0) && (batt_sample_initialized != 0) && (batt_sample.raw < raw)) {
		raw = batt_sample.raw;	/* prev sample use */
	}

	/*
	 * check normal/caution band
	 */
	if (raw <= batt_cap [BATT_CAP_CAUTION_LEVEL].raw) {
		batt_sample.mode_caution = 1;
	} else {
		batt_sample.mode_caution = 0;
	}

	batt_sample.raw = raw;
	/*
	 * Convert voltage
	 */
	batt_sample.volt = BATT_RAW_TO_VOLT(raw);

	batt_sample_initialized = 1;

	return rc;
}