I have been having some issues with the A/D converter on the OMAP3530
platform, using the TWL4030. The hardware I am using is the Logic
OMAP3530 LV SOM Zoom2 Development Kit. I created a driver which uses
the twl4030-madc driver to obtain the A/D values for ADCIN3 and
ADCIN4. I am not getting valid values back from the MADC driver. For
instance, I am getting 0 for ADCIN3 and 24496 for ADCIN4. (24496 is
obviously wrong as it is out of the range of the 10-bit A/D...) Even
if I vary the voltage on these inputs, I get the same results. Here
is the structure that I am sending into the twl4030_conversion()
function:
// ** start code
struct twl4030_madc_request req;
int tempX, tempY;
req.channels = 0x0000 | TWL4030_MADC_ADCIN3 | TWL4030_MADC_ADCIN4;
req.do_avg = 0;
req.method = TWL4030_MADC_SW1;
req.active = 0;
req.type = TWL4030_MADC_WAIT;
req.func_cb = NULL;
twl4030_madc_conversion(&req);
if(&req == NULL)
{
printk("req is NULL after conversion request!\n");
}
else if(req.rbuf == NULL)
{
printk("req.rbuf is NULL after conversion request!\n");
}
else
{
tempX = (u16)req.rbuf[4];
tempY = (u16)req.rbuf[3];
printk("Received A/D values, tempX = %d, tempY = %d\n", tempX, tempY);
}
// ** end code
I also tried implementing two other versions using 'req.channels =
TWL4030_MADC_ADCIN3' or 'req.channels = TWL4030_MADC_ADCIN4' instead
of the combined version shown above and I am getting the same bogus
results.
Is there some issue with what I am doing here?
Has anyone successfully utilized this driver?
I looked into the issue further by sending/receiving i2c commands
straight to the TWL4030 using i2cset and i2cget in a shell script.
Here is the sequence of commands that I used:
# ** start shell script
i2cset -f -y 1 0x49 0x91 0x90
i2cset -f -y 1 0x4a 0x00 0x01
i2cset -f -y 1 0x4a 0x06 0xff
i2cset -f -y 1 0x4a 0x07 0xff
i2cset -f -y 1 0x4a 0x97 0x02
i2cset -f -y 1 0x4a 0x12 0x20
sleep 1
GPCH3_LSB=`i2cget -f -y 1 0x4a 0x3d`
GPCH3_MSB=`i2cget -f -y 1 0x4a 0x3e`
GPCH4_LSB=`i2cget -f -y 1 0x4a 0x3f`
GPCH4_MSB=`i2cget -f -y 1 0x4a 0x40`
let ADC3=`printf %d $GPCH3_LSB`/64+`printf %d $GPCH3_MSB`*4
let ADC4=`printf %d $GPCH4_LSB`/64+`printf %d $GPCH4_MSB`*4
let VAL3=($ADC3*2444)/1000
let VAL4=($ADC4*2444)/1000
echo "ADC3 value is $ADC3 , $VAL3 millivolts GP analog input"
echo "ADC4 value is $ADC4 , $VAL4 millivolts GP analog input"
# ** end shell script
>From this script, I am getting 6 for both ADC outputs, even with
varying voltages.
Is there something I am doing wrong here?
Any help would be greatly appreciated. Thanks in advance.
-Steve Ziegler
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html