* Problem trying to measure OMAP35x core temperature
@ 2010-12-11 21:14 Peter Barada
2010-12-13 8:41 ` Jean Pihet
0 siblings, 1 reply; 2+ messages in thread
From: Peter Barada @ 2010-12-11 21:14 UTC (permalink / raw)
To: linux-omap@vger.kernel.org
I'm trying to add code to a 2.6.32 kernel to extract the OMAP core
temperature for thermal testing, and section 7.4.6 of the OMAP3 TRM
(spug98g.pdf) explains the CONTROL_TEMP_SENSOR register.
I've added the following code:
static void omap3logic_fetch_temp(char *temp_buf)
{
int temp_val;
unsigned int temp;
static short temp_table[] = {
-400, -400, -400, -400, -400,
-400, -389, -375, -361, -333, /* 0-9 */
-318, -304, -290, -275, -261,
-247, -233, -219, -205, -191, /* 10-19 */
-177, -163, -149, -134, -120,
-106, -92, -78, -64, -50, /* 20-29 */
-35, -21, -7, +8, +23,
+37, +51, +66, +80, +94, /* 30-39 */
+108, +123, +137, +151, +165,
+179, +194, +208, +222, +236, /* 40-49 */
+251, +265, +279, +293, +307,
+321, +335, +349, +364, +378, /* 50-59 */
+392, +406, +420, +424, +449,
+463, +447, +491, +505, +519, /* 60-69 */
+533, +546, +560, +574, +588,
+602, +616, +630, +644, +657, /* 70-79 */
+671, +685, +699, +713, +727,
+741, +755, +769, +783, +797, /* 80-89 */
+811, +823, +838, +852, +865,
+879, +893, +906, +920, +934, /* 90-99 */
+947, +961, +975, +989, +1002,
+1016, +1030, +1043, +1057, +1071, /* 100-109 */
+1085, +1098, +1112, +1126, +1140,
+1153, +1167, +1181, +1194, +1208, /* 110-119 */
+1222, +1235, +1249, +1250, +1250,
+1250, +1250, +1250, +1250, /* 120-128 */
};
temp = omap_ctrl_readl(OMAP343X_CONTROL_TEMP_SENSOR);
temp_val = (temp_table[temp&0x7f] + temp_table[(temp&0x7f)+1]) / 2;
sprintf(temp_buf, "%d.%1d (%02x)", temp_val/10, ((unsigned
int)temp_val)%10, temp);
}
static ssize_t
omap3logic_show_temp(struct class *class, char *buf)
{
ssize_t retval;
char temp[128];
omap3logic_fetch_temp(temp);
retval = sprintf(buf, "%s\n", temp);
return retval;
}
static struct class_attribute temp_attr =
__ATTR(temp, S_IRUGO, omap3logic_show_temp, NULL);
static struct class *omap3logic_temp_class;
void omap3logic_temp_init(void)
{
int rc;
omap3logic_temp_class = class_create(THIS_MODULE, "temp");
if (IS_ERR(omap3logic_temp_class)) {
printk(KERN_ERR "%s: couldn't create temp class\n", __FUNCTION__);
return;
}
rc = class_create_file(omap3logic_temp_class, &temp_attr);
if (unlikely(rc)) {
printk(KERN_ERR "%s: couldn't create temp class file\n",
__FUNCTION__);
return;
}
/* Set CONTCONV and SOC to start continuous temperature measurements */
omap_ctrl_writel(0x300, OMAP343X_CONTROL_TEMP_SENSOR);
}
But when I read the register back, I see only a fixed temperature value,
even if I fire up some video demos to crank up the load. If I reboot
I'll see the temperature jump up, but then it stays constant whether I
increase/decrease the CPU load.
Any ideas why this isn't working?
Thanks in advance!
--
Peter Barada
peterb@logicpd.com
^ permalink raw reply [flat|nested] 2+ messages in thread* Re: Problem trying to measure OMAP35x core temperature
2010-12-11 21:14 Problem trying to measure OMAP35x core temperature Peter Barada
@ 2010-12-13 8:41 ` Jean Pihet
0 siblings, 0 replies; 2+ messages in thread
From: Jean Pihet @ 2010-12-13 8:41 UTC (permalink / raw)
To: Peter Barada; +Cc: linux-omap@vger.kernel.org
On Sat, Dec 11, 2010 at 10:14 PM, Peter Barada <peterb@logicpd.com> wrote:
> I'm trying to add code to a 2.6.32 kernel to extract the OMAP core
> temperature for thermal testing, and section 7.4.6 of the OMAP3 TRM
> (spug98g.pdf) explains the CONTROL_TEMP_SENSOR register.
I have not look at it further but there is some code at
http://thread.gmane.org/gmane.linux.ports.arm.omap/8424/focus=8514.
Hope this helps!
Jean
>
> I've added the following code:
>
> static void omap3logic_fetch_temp(char *temp_buf)
> {
> int temp_val;
> unsigned int temp;
> static short temp_table[] = {
> -400, -400, -400, -400, -400,
> -400, -389, -375, -361, -333, /* 0-9 */
> -318, -304, -290, -275, -261,
> -247, -233, -219, -205, -191, /* 10-19 */
> -177, -163, -149, -134, -120,
> -106, -92, -78, -64, -50, /* 20-29 */
> -35, -21, -7, +8, +23,
> +37, +51, +66, +80, +94, /* 30-39 */
> +108, +123, +137, +151, +165,
> +179, +194, +208, +222, +236, /* 40-49 */
> +251, +265, +279, +293, +307,
> +321, +335, +349, +364, +378, /* 50-59 */
> +392, +406, +420, +424, +449,
> +463, +447, +491, +505, +519, /* 60-69 */
> +533, +546, +560, +574, +588,
> +602, +616, +630, +644, +657, /* 70-79 */
> +671, +685, +699, +713, +727,
> +741, +755, +769, +783, +797, /* 80-89 */
> +811, +823, +838, +852, +865,
> +879, +893, +906, +920, +934, /* 90-99 */
> +947, +961, +975, +989, +1002,
> +1016, +1030, +1043, +1057, +1071, /* 100-109 */
> +1085, +1098, +1112, +1126, +1140,
> +1153, +1167, +1181, +1194, +1208, /* 110-119 */
> +1222, +1235, +1249, +1250, +1250,
> +1250, +1250, +1250, +1250, /* 120-128 */
> };
>
> temp = omap_ctrl_readl(OMAP343X_CONTROL_TEMP_SENSOR);
>
> temp_val = (temp_table[temp&0x7f] + temp_table[(temp&0x7f)+1]) / 2;
> sprintf(temp_buf, "%d.%1d (%02x)", temp_val/10, ((unsigned
> int)temp_val)%10, temp);
> }
>
> static ssize_t
> omap3logic_show_temp(struct class *class, char *buf)
> {
> ssize_t retval;
> char temp[128];
>
> omap3logic_fetch_temp(temp);
> retval = sprintf(buf, "%s\n", temp);
> return retval;
> }
>
> static struct class_attribute temp_attr =
> __ATTR(temp, S_IRUGO, omap3logic_show_temp, NULL);
>
> static struct class *omap3logic_temp_class;
>
> void omap3logic_temp_init(void)
> {
> int rc;
>
> omap3logic_temp_class = class_create(THIS_MODULE, "temp");
> if (IS_ERR(omap3logic_temp_class)) {
> printk(KERN_ERR "%s: couldn't create temp class\n", __FUNCTION__);
> return;
> }
> rc = class_create_file(omap3logic_temp_class, &temp_attr);
> if (unlikely(rc)) {
> printk(KERN_ERR "%s: couldn't create temp class file\n",
> __FUNCTION__);
> return;
> }
>
> /* Set CONTCONV and SOC to start continuous temperature measurements */
> omap_ctrl_writel(0x300, OMAP343X_CONTROL_TEMP_SENSOR);
> }
>
> But when I read the register back, I see only a fixed temperature value,
> even if I fire up some video demos to crank up the load. If I reboot I'll
> see the temperature jump up, but then it stays constant whether I
> increase/decrease the CPU load.
>
> Any ideas why this isn't working?
>
> Thanks in advance!
>
> --
> Peter Barada
> peterb@logicpd.com
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2010-12-13 8:41 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-12-11 21:14 Problem trying to measure OMAP35x core temperature Peter Barada
2010-12-13 8:41 ` Jean Pihet
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox