Hi Peter,
a few quick comments.
On Mon, 19 May 2008, Peter 'p2' De Schrijver wrote:
> +#define SCM_CONTROL_TEMP_SENSOR (OMAP343X_SCM_BASE + 0x524)
Consider moving this to include/asm-arm/arch-omap/control.h ?
> +#define CM_FCLKEN3_CORE (OMAP3430_CM_BASE + 0x200 + 0x8)
The above define doesn't appear to be used.
> +/* minimum delay for EOCZ rise after SOC rise is
> + * 11 cycles of the 32Khz clock */
> +#define EOCZ_MIN_RISING_DELAY (11 * 31250)
Doesn't the 32k sync timer run at 32KiHz == 32768 cycles/second? I wonder
if this might be affecting the temperature values.
> + temp_sensor_reg = omap_readl(SCM_CONTROL_TEMP_SENSOR);
> + temp_sensor_reg |= TEMP_SENSOR_SOC;
> + omap_writel(temp_sensor_reg, SCM_CONTROL_TEMP_SENSOR);
Consider ctrl_{read,write}_reg() instead.
> + temp_sensor_reg &= ~TEMP_SENSOR_SOC;
> + omap_writel(temp_sensor_reg, SCM_CONTROL_TEMP_SENSOR);
Likewise.
> +
> + expire = ktime_add_ns(ktime_get(), EOCZ_MAX_FALLING_DELAY);
> + timeout = ns_to_timespec(EOCZ_MIN_FALLING_DELAY);
> + hrtimer_nanosleep(&timeout, NULL, HRTIMER_MODE_REL,
> + CLOCK_MONOTONIC);
> +
> + do {
> + temp_sensor_reg = omap_readl(SCM_CONTROL_TEMP_SENSOR);
> + if (!(temp_sensor_reg & TEMP_SENSOR_EOCZ))
> + break;
> + } while (ktime_us_delta(expire, ktime_get()) > 0);
> +
> + if (temp_sensor_reg & TEMP_SENSOR_EOCZ)
> + goto err;
The code in the above block is duplicated twice with only a few parameter
changes -- perhaps move this into a function?
> +static int __devinit omap34xx_temp_probe(void)
> +{
> + int err;
> + struct omap34xx_data *data;
> +
> + err = platform_device_register(&omap34xx_temp_device);
> + if (err) {
> + printk(KERN_ERR
> + "Unable to register omap34xx temperature device\n");
> + goto exit;
> + }
All of the following error paths in this function should call
platform_device_unregister() also, correct?
> +static void __exit omap34xx_temp_exit(void)
> +{
> + struct omap34xx_data *data =
> + dev_get_drvdata(&omap34xx_temp_device.dev);
> +
> + clk_put(data->clk_32k);
> + hwmon_device_unregister(data->hwmon_dev);
> + device_remove_file(&omap34xx_temp_device.dev,
> + &sensor_dev_attr_temp1_input.dev_attr);
> + device_remove_file(&omap34xx_temp_device.dev, &dev_attr_name);
> + kfree(data);
Should this also include a platform_device_unregister()?
> +}
- Paul
--
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