Example #1
0
static u32 cal_opp5_nvalue(u32 prev_nvalue)
{
	u32 senpgain, senngain;
	u32 rnsenp, rnsenn;
	u32 prev_senPgain, prev_senNgain;
	u32 prev_senPRN, prev_senNRN;
	u32 nAdj,sennval,senpval;

	prev_senPgain = (prev_nvalue & 0x00f00000) >> 0x14;
	prev_senNgain = (prev_nvalue & 0x000f0000) >> 0x10;

	prev_senPRN = (prev_nvalue & 0x0000ff00) >> 0x8;
	prev_senNRN = (prev_nvalue & 0x000000ff);

	senpval = ((1 << (prev_senPgain + 8))/prev_senPRN) + 235;
	sennval = ((1 << (prev_senNgain + 8))/prev_senNRN) + 385;

	/* Calculating the gain and reciprocal of the SenN and SenP values */
	cal_reciprocal(senpval, &senpgain, &rnsenp);
	cal_reciprocal(sennval, &senngain, &rnsenn);

	return (senpgain << NVALUERECIPROCAL_SENPGAIN_SHIFT) |
		(senngain << NVALUERECIPROCAL_SENNGAIN_SHIFT) |
		(rnsenp << NVALUERECIPROCAL_RNSENP_SHIFT) |
		(rnsenn << NVALUERECIPROCAL_RNSENN_SHIFT);
}
Example #2
0
/* Read EFUSE values from control registers for OMAP3430 */
static void __init sr_set_nvalues(struct omap_volt_data *volt_data,
				struct omap_sr_data *sr_data)
{
	struct omap_sr_nvalue_table *nvalue_table;
	int i, count = 0;

	while (volt_data[count].volt_nominal)
		count++;

	nvalue_table = kzalloc(sizeof(struct omap_sr_nvalue_table)*count,
			GFP_KERNEL);

	for (i = 0; i < count; i++) {
		u32 v;
		/*
		 * In OMAP4 the efuse registers are 24 bit aligned.
		 * A __raw_readl will fail for non-32 bit aligned address
		 * and hence the 8-bit read and shift.
		 */
		if (cpu_is_omap44xx()) {
			u16 offset = volt_data[i].sr_efuse_offs;
#ifdef CONFIG_OMAP_SMARTREFLEX_CUSTOM_SENSOR
  if (offset == 0) {
    u32 pgain = 0, pvalue = 0, ngain = 0, nvalue = 0;

    cal_reciprocal(volt_data[i].sr_nsensor, &ngain, &nvalue);
    cal_reciprocal(volt_data[i].sr_psensor, &pgain, &pvalue);

    v = (pgain << NVALUERECIPROCAL_SENPGAIN_SHIFT) |
      (ngain << NVALUERECIPROCAL_SENNGAIN_SHIFT) |
      (pvalue << NVALUERECIPROCAL_RNSENP_SHIFT) |
      (nvalue);
    } else { 
			v = omap_ctrl_readb(offset) |
				omap_ctrl_readb(offset + 1) << 8 |
				omap_ctrl_readb(offset + 2) << 16;
}
#else
      v = omap_ctrl_readb(offset) |
        omap_ctrl_readb(offset + 1) << 8 |
        omap_ctrl_readb(offset + 2) << 16;  
#endif  
		} else {
			 v = omap_ctrl_readl(volt_data[i].sr_efuse_offs);
		}

		nvalue_table[i].efuse_offs = volt_data[i].sr_efuse_offs;
		nvalue_table[i].nvalue = v;
	}

	sr_data->nvalue_table = nvalue_table;
	sr_data->nvalue_count = count;
}
static u32 cal_test_nvalue(u32 sennval, u32 senpval)
{
	u32 senpgain, senngain;
	u32 rnsenp, rnsenn;

	/* Calculating the gain and reciprocal of the SenN and SenP values */
	cal_reciprocal(senpval, &senpgain, &rnsenp);
	cal_reciprocal(sennval, &senngain, &rnsenn);

	return (senpgain << NVALUERECIPROCAL_SENPGAIN_SHIFT) |
		(senngain << NVALUERECIPROCAL_SENNGAIN_SHIFT) |
		(rnsenp << NVALUERECIPROCAL_RNSENP_SHIFT) |
		(rnsenn << NVALUERECIPROCAL_RNSENN_SHIFT);
}
Example #4
0
void sr_calculate_rg(u32 rfuse, u32 gain_fuse, u32 delta_nt,
		u32 *rnsen, u32 *sengain)
{
	u32 nadj;
	nadj = ((1 << (gain_fuse + 8)) / rfuse) + delta_nt;
	cal_reciprocal(nadj, sengain, rnsen);
}