J'ai été intrigué par un problème de RTC pendant plusieurs jours: je ne pouvais pas écrire dans le registre RTC. Ci-dessous est l'extrait de code et la valeur que j'ai lu de la reg (dernière ligne) est toujours différente de ce que je viens d'écrire à la Reg. Tout le monde peut m'aider à comprendre cela? J'utilise linux 2.6 noyau et les plates-formes que j'ai essayé étaient PPC et x86.quelle est la cause probable de CMOS_WRITE ne fonctionne pas?
MISE À JOUR: plus des extraits de code par le commentaire de Amardeep ...
/* disable periodic interrupts */
tmp_control = CMOS_READ(RTC_CONTROL);
tmp_control &= ~RTC_PIE;
CMOS_WRITE(tmp_control, RTC_CONTROL);
CMOS_READ(RTC_INTR_FLAGS);
val = CMOS_READ(RTC_FREQ_SELECT);
printk(KERN_INFO "reading val=%d from RTC_FREQ_SELECT.\n", val);
val &= 0xf0;
/* ...... */
val |= 2;
printk(KERN_INFO "writing val=%d to RTC_FREQ_SELECT.\n", val);
CMOS_WRITE(val, RTC_FREQ_SELECT);
printk(KERN_INFO "reading val=%d from RTC_FREQ_SELECT.\n", CMOS_READ(RTC_FREQ_SELECT));
/* Enable periodic interrupts */
tmp_control = CMOS_READ(RTC_CONTROL);
tmp_control |= RTC_PIE;
CMOS_WRITE(tmp_control, RTC_CONTROL);
/* read the flags register to start interrupts */
CMOS_READ(RTC_INTR_FLAGS);