# Batteria su ACPI, Acer Travelmate e kernel 2.6.x (x>0)

## federico

Dunque...

Sul mio portatile Acer Travelmate 291lmi ACPI funziona bene col kernel 2.6.0 gentoo r1 ma lo stato della batteria viene rilevato male con ogni kernel 2.6 superiore a questo.

Rilevato male significa che il cat del proc viene eseguito correttamente un paio di volte e poi nell'arco di pochi secondi lo status della batteria diventa non leggibile.

Il problema e' da imputarsi al DSTD (che pero' col kernel 2.6.0 funziona) o alle versioni nuove di ACPI per i kernel 2.6.1 2 e 3 ?

Ho provveduto ad aggiornare il bios della macchina al + recente, ho fatto mille prove per compilare pezzi di un kernel con l'altro  :Smile:  ma senza risultati.

In che modo devo procedere? Attendere nuove versioni di acpi e sperare cosi' di poter aggiorare il mio kernel oppure provare a correggere la DSTD table (seguendo un howto sul forum ho scoperto che effettivamente qualche errore lo da) visto che non ne ho trovata una corretta per il mio portatile?

Federico

----------

## blackgenio

uso un acer 1300 series con ACPI e kernel 2.6.3 e mai avuto problemi

lo stato della batteria viene letto sempre correttamente

appena torno a casa se vuoi posso postarti il mio .config

così puoi provare ...

la configurazione dovrebbe essere uguale

cia ciaoo

----------

## federico

Non credo si possa sbagliare: abilito nel kernel acpi come * o come M (provato entrambi) e leggo lo status sotto /proc/acpi/battery ecc ecc

Funziona sul 2.6.0, non funziona sugli altri. O meglio. Posso "cattare" due o tre volte lo status, leggerlo, ma nell'arco di pochi secondi diventa "unknown"

Fede

----------

## antenore

Ho scritto una miniminiminimini guida se ti interessa e può esserti utile...

http://antenore.altervista.org/articoli/ACPI_DSDT.htm

----------

## federico

Sto lavorando su qualcosa di questo tipo ora grazie per la guida, sto seguendo questo percorso  :Smile: 

```

dsdt.dsl    84:     Method (_WAK, 1, NotSerialized)

Warning  2026 -                ^ Reserved method must return a value (_WAK)

dsdt.dsl  1198:                                 If (Local1)

Error    1013 - Method local variable is not initialized ^  (Local1)

dsdt.dsl  2889:                     Field (ERAM, AnyAcc, Lock, Preserve)

Error    1048 -                               ^ Host Operation Region requires ByteAcc access

dsdt.dsl  3090:                     Field (ECRM, AnyAcc, Lock, Preserve)

Error    1048 -                               ^ Host Operation Region requires ByteAcc access

```

Ho corretto i due errori sostituendo AnyAcc con ByteAcc e corretto il warning (che dalle guide che ho letto mi pare abbastanza standard) col return proposto ma dopo la compilazione ottengo

```

dsdt.dsl  1198:                                 If (Local1)

Error    1013 - Method local variable is not initialized ^  (Local1)

```

Un secondo errore.. Sto cercando di venirne a capo..

Fede

----------

## antenore

Si aspetta un Return Package...

Puoi postare un pezzo del codice?

----------

## antenore

 :Embarassed:   Ho sbagliato ... scusa ho letto male...

E' un errore che avevi anche prima comunque...

Fai le giuste proporzioni con

 *Quote:*   

> # Error 1013 - Method local variable is not initialized (Local0)
> 
> Intel ACPI Component Architecture
> 
> ASL Compiler / AML Disassembler version 20020725 [Jul 25 2002]
> ...

 

----------

## federico

Si hai ragione e' un errore che avevo anche prima, non mi ero accorto, meno male che non si generano man mano che ne risolvi altri questi errori..

Ho letto anche io la documentazione che hai postato adesso ma purtroppo il mio codice non ha nulla di simile e sto migolando nel buio..

Provo a mostrarti qualcosa:

```

Method (SWAP, 0, NotSerialized)

                {

                    \_SB.PCI0.LPC0.PHSS (0x0A)

                    Store (BAYS, Local0)

                    If (LOr (LEqual (Local0, 0x04), LEqual (Local0, 0x08)))

                    {

                        If (LEqual (\_SB.PCI0.LPC0.SPWR, 0x00))

                        {

                            Store (0x01, \_SB.PCI0.LPC0.SPWR)

                            Sleep (0x1E)

                            And (\_SB.PCI0.IDEC.ICR4, 0x03, \_SB.PCI0.IDEC.ICR4)

                            Sleep (0x1E)

                            Store (0x01, \_SB.PCI0.LPC0.SRST)

                        }

                        If (LNot (LLess (OSTP, 0x01)))

                        {

                            Sleep (0x09C4)

                            If (LEqual (OSTP, 0x01))

                            {

                                If (Local1)

                                {

                                    Sleep (0x09C4)

                                }

                            }

                        }

                    }

                    Else

                    {

                        \_SB.PCI0.LPC0.EJSE ()

                    }

                    If (LNot (LLess (OSTP, 0x01)))

                    {

                        Notify (\_SB.PCI0.IDEC.SECD, 0x00)

                        Notify (\_SB.PCI0.IDEC.SECD.S_D0, 0x01)

                    }

                }

```

Sto cercando su google se nessuno ha riscontrato questo errore nella mia stessa forma...

Fece

----------

## antenore

OSTP dovrebbe essere una variabile dove è memorizzato il tipo di sistema operativo... Una cosa M$ per usare dsdt bacati con winzoz...

Io toglierei (o commenteri /*       */) tutta la parte...

 *Quote:*   

> If (LNot (LLess (OSTP, 0x01)))
> 
>                         {
> 
>                             Sleep (0x09C4)
> ...

 

Provi?

----------

## federico

Se commento tutto come consigli tu o se commento solo la if oppure ancora se cambia local1 a local0, in tutti e tre i casi funziona (funziona significa che compila almeno)

Adesso faccio gli esperimenti diretti col kernel SE TROVO LA PATCH... (ho notato che non esiste una patch initrd per kernel superiori al 2.6.1)

----------

## federico

In qualche modo ho patchato il kernel, lanciato la mia DSDT ma ormai sono convinto che e' ACPI buggato..

Cosa accade.. Sul kernel 2.6.0 va tutto enza alcun problema, sui successivi la batteria viene letta CORRETTAMENTE un paio di volte e poi sparisce.. DSDT corretto o meno.. Vi mostro per rendervi partecipi del mio dolore   :Crying or Very sad:   :Crying or Very sad:   :Crying or Very sad: 

http://www.sideralis.net/blackman/battery.png

E' quasi incredibile ...

Fede

----------

## antenore

Hai provato a modificare OSTP (o simili) dai messaggi del tuo ACPI risulta che è di tipo MSFT. Quindi è un DSDT fatto apposta per windows(r)... Sull'howto c'è scritto come fare...

 *Quote:*   

> 10a. Windows-only DSDT functionality
> 
> You may find that you have no errors in your DSDT, but there are still errors in dmesg, or missing ACPI functionality. This may be because your DSDT is testing for the name of your OS. Many DSDTs do this, and enable certain functionality only if you are running a particular OS (usually, of course, Windows XP). To test for this, look for lines in your DSDT that check the value or length of the "_OS" variable. For example, you may find lines like this: 

 

https://forums.gentoo.org/viewtopic.php?t=122145

Anch'io ci sto provando e penso di ottenere buoni risultati...

Nel tuo caso, penso, che la variabile sia OSTP e non _OS... ma... Da vedere...

Facce sape... Facce sogna...

----------

## silian87

E dopo dicono che linux e' incompatibile con l'hardware comune.... certo, fino a quando:

1)Le periferiche rilasciano solo driver per windows, e quelli per linux sono spesso scadenti

2)I componenti vengono progettati apposta per funzionare con windows

E poi ditemi dove lo trovate un sistema operativo che si installa e non richiede driver esterni... (forse qualcuno). Io con windows passavo ore ad installare driver, con relativi problemi!

Altro che semplicità di utilizzo!

----------

## federico

Faro' prove aggiuntive seguendo i cosigli, e state certi che lasciargliela vinta mi fa proprio girare le @@, è una questione di principio!

Non si devono permettere di farmi l'hardware proprietario! La questione è che dovrebbe essere l'utente ad avere la possibilita' di scegliere cosa fare del pc, non chi te lo vende..

[E si che prima di comprare questa macchina avevo cercato bene per eventuali incompatibilita' con linux visto che windows non ha diritto di rimanere sul mio disco.. Ma chi avrebbe mai pensato che il bios fosse scritto microsoft compliant..]

Fede

----------

## MyZelF

Il BIOS è aggiornato?

----------

## silian87

Io ho preso un powerbook a posta per avere una macchina compatibile 100% con linux... pero' per circa 3 mesi non e' stato proprio cosi'... (come shev si ricordera'...).   :Sad: 

Avevo il processore che andava a 600 invece che a 1000, X non funzionava, nemmeno alsa, per non parlare della mappatura della tastiera...

Ora, dopo tanta fatica, ed alla stesura della gida, posso ritenermi soddisfatto del mio acquisto!   :Very Happy: 

P.S.:Dimenticavo,.... anche le macchie bianche!

----------

## antenore

Ho aggiunto, come suggerito dall'howto su gentoo, append="acpi_os_name='Windows 2001' a /etc/lilo.conf

 *Quote:*   

> append="acpi_os_name='Windows 2001', vesa, mtrr"

 

e ho ottenuto degli ottimi risultati...

Provare per credere...

riferimenti https://forums.gentoo.org/viewtopic.php?t=122145

----------

## federico

Si avevo provveduto ad aggiornare il bios all'ultima versione e ho fatto le prove suggerite ma non cambia, con o senza dsdt e con un kernel diverso dal 2.6.0 sono in grado di leggere (io o un programma) lo stato della batteria esattamente DUE (conseguenti, a 10 minuti, dopo un po' che e' acceso il sistema sempre le volte si contano in numero 2) volte dall'avvio del sistema e poi non è piu' possibile..

Sono perplesso..

Fede

----------

## federico

Probabilmente si trattava di un baco o una mancanza in acpi. La mia batteria funziona bene sul 2.6.0 e ora ha ripreso a funzionare sull'ultimo 2.6.5 (sto provando il 2.6.5 gentoo r1) mentre in tutti i kernel tra questi due non funziona.

Speriamo che i ragazzi di acpi non mi tolgano nuovamente il supporto  :Smile: 

----------

## motaboy

Ma hai fatto un report del bug o hai aspettato che qualcuno lo correggesse? 

Secondo me in questi casi sarebbe giusto riportare subito il problema agli sviluppatori dell'acpi, e stai quasi sicuro che una soluzione la trovano.

Bye!

----------

## federico

Non ho fatto un bug report perche' non ero del tutto sicuro che fosse un problema casuale ma voluto leggendo sul sito di acpi che hanno blacklisted hardware e che vi e' la possibilita' di trikkare i dsdt...

Se il problema ricomparisse con una versione successiva del kernel faro' subito un bug report.

----------

