# Lid del mio portatile [solved]

## Elbryan

Ho deciso di dare un altro try a gentoo e, come sempre, mi trovo a dover litigare con il lid del mio notebook.

Infatti se chiudo il coperchio e poi lo riapro, il monitor resta spento.

Sfogliando su google ho trovato questo link:

http://gentoo-wiki.com/HARDWARE_Dell_Inspiron_640m#ACPI:_LCD_ON.2FOFF

Questa operazione l'avevo già provata e successivamente ho dovuto editare lo script perché sul mio note non funzionava.

Ora, però, noto che la wiki è stata modificata ed hanno aggiunto un ulteriore metodo che sembrare sistemare il problema.

Ve lo riporto qui:

As an alternative to the process above, experienced users may wish to patch their DSDT with http://www.reactivated.net/systems/dell-640m/dsdt/01_lid-power-lcd.patch - after this modification, lid open/closing works as expected with no requirement for acpid or similar.

La mia scarsa conoscenza di gentoo mi impedisce di comprendere come utilizzare questa patch (probabilmente è una patch del kernel, perdonate se ho detto una bestemmia).

Qualcuno saprebbe indicarmi la via migliore per raggiungere lo scopo?

Nel caso la via migliore sia la seconda, come applico la patch?

Se è una patch del kernel devo ogni volta riapplicarla manualmente nel caso io ricompili il kernel?

Grazie ^^Last edited by Elbryan on Sun Sep 30, 2007 4:13 pm; edited 1 time in total

----------

## Dottout

non è una patch del kernel bensì del DSDT, che fa parte delle specifiche base di acpi. quella patch la applichi al dsdt con un patch -p0 <nomepatch, cmq la procedura per fixare il dsdt richiede qualche step aggiuntivo, che trovi spiegato in questa guida (sorry non mi ricordo tutti i passi)

----------

## Elbryan

se ti dicessi che tutta quella roba da far da solo mi spaventa a morte, mi daresti una vaga indicazione? ^^'''

----------

## Dottout

ti serve il compilatore che trovi qui: http://developer.intel.com/technology/iapc/acpi/downloads.htm

poi:

Extract your current DSDT to a file as follows:

Code:

cat /proc/acpi/dsdt > dsdt.dat

Disassemble the DSDT

Code:

./iasl -d dsdt.dat

This will create a file called dsdt.dsl, which contains the disassembled DSDT. Have a look at it if you like. You can view its contents with any text editor. <-- così ottieni quello da patchare

# Recompile the DSDT.

Code:

./iasl -tc dsdt.dsl

This will create two files, dsdt.hex and DSDT.aml.  <- questo step ti ricompila il dsdt patchato (è l'.hex)

per sostituirlo al tuo segui la guida al punto: 9. Incorporating the fixed DSDT into the kernel 

(lo so che questo copia\incolla fa schifo ma almeno sintetizza un minimo  :Wink:  )

----------

## Elbryan

perfect  :Smile:  appena ho tempo (domani credo) ci provo ^^

Grazie mille per la disponibilità intanto!

----------

## djinnZ

il compilatore è in portage (eix acpi) e mi pare sia pure stabile

----------

## Elbryan

 *djinnZ wrote:*   

> il compilatore è in portage (eix acpi) e mi pare sia pure stabile

 

mi pare si chiami iasl (emerge iasl).

Comunque in fase di compilazione mi da un errore su un qualcosa che dev'essere per forza alfanumerico..

Ora sto emergendo gnome, poi quando ho un supporto gui vi posto l'errore completo (però ho notato che nonostante l'errore il file .hex me l'ha generato..mboh).

----------

## Elbryan

perdonatemi se uppo la conversazione, comunque questo è il problema che vi dicevo ieri:

```

dsdt.dsl  1066:             Name (_HID, "*pnp0c14")

Error    4001 -                                  ^ String must be entirely alphanumeric (*pnp0c14)

```

però nonostante l'errore:

```

blackbox dsdt # ls -la

total 492

drwxr-xr-x  2 root    root    4096 Sep 30 01:35 .

drwxr-xr-x 23 elbryan users   4096 Sep 30 01:35 ..

-rw-r--r--  1 root    root     887 May  6 22:33 01_lid-power-lcd.patch

-rw-r--r--  1 root    root   17292 Sep 30 01:31 dsdt.dat

-rw-r--r--  1 root    root  148834 Sep 30 01:31 dsdt.dsl

-rw-r--r--  1 root    root  148539 Sep 30 01:31 dsdt.dsl.orig

-rw-r--r--  1 root    root  149660 Sep 30 01:35 dsdt.hex

```

il file dsdt.hex è presente.. non mi fido a continuare però..

Qualcuno ha una vaga idea del motivo di tutto ciò?

----------

## mrfree

http://gentoo-wiki.com/HOWTO_Fix_Common_ACPI_Problems credo sia un buon inizio se non hai mai avuto a che fare con i DSDT  :Wink: 

----------

## Elbryan

 *mrfree wrote:*   

> http://gentoo-wiki.com/HOWTO_Fix_Common_ACPI_Problems credo sia un buon inizio se non hai mai avuto a che fare con i DSDT 

 

non ho trovato nulla di realmente utile a scoprire la causa dell'errore però  :Sad: 

----------

## Dottout

puoi usare un dsdt anche buggato (cosa che del resto hai fatto fino adesso). la patch dovrebbe migliorare la situazione, in merito a quell'errore non so, puoi provare a individuarlo tu oppure continuare a ignorarlo

----------

## mrfree

 *Elbryan wrote:*   

> non ho trovato nulla di realmente utile a scoprire la causa dell'errore però 

 Dai un'occhiata a questo diff (l'ho trovato qui cercando su google) se l'autore dice il vero ti basterebbe eliminare l'*  :Wink: 

----------

## djinnZ

vai su acpi.sf.net e chiedi aiuto.

a naso direi che può essere che sia una chiamata a funzione (o come diavolo si chiamano) che è stata scritta male. cerca se da qualche parte esiste qualcosa che assomiglia ad una funzione che si chiama "pnp0c14" se c'è prova a togliere l'asterisco e ricompilare.

Ovviamente è a tuo rischio e pericolo e non so quali danni puoi causare.

----------

## Elbryan

Questa cosa è più grande di me e un poco mi spaventa..

Quindi ho preferito passare allo script..  :Smile:  grazie comunque

----------

## Dottout

non per forzarti a far passi + lunghi della gamba ma: allo stato attuale il tuo dsdt è buggato, potresti accontentarti di applicare la patch e ignorare il precedente errore (che fino ad ora è risultato esser innocuo)

----------

## Elbryan

 *Dottout wrote:*   

> non per forzarti a far passi + lunghi della gamba ma: allo stato attuale il tuo dsdt è buggato, potresti accontentarti di applicare la patch e ignorare il precedente errore (che fino ad ora è risultato esser innocuo)

 

ma ho trovato un diff per fare l'override del mio dsdt (traltro per il kernel 2.6.21 e non per il .22 ma non dava errori) e l'ho applicata sistemando come suggeritomi da djinnz..

Ho riavviato e s'è bloccato all'avvio, subito dopo aver rilevato il cdrom e gli hard disk..

Non ho idea di come metterci mano, per cui...

----------

## djinnZ

 :Shocked:  aspetta un attimo e ricapiltoliamo.

per caricare il dsdt (con kernel gentoo/hardened/suspend2 gli altri non so) devi andare in device drivers -> generic driver options e mettere no a Select only drivers that do not need compile externa software (o giù di li, sarebbe STANDALONE=N) poi devi andare in power management -> acpi, abilitare custom dsdt (ACPI_CUSTOM_DSDT=Y) e valorizzare custom dstd table (ACPI_CUSTOM_DSDT_FILE=path) nel modo corretto (vecchio problema del kernel meglio usare un persorso assoluto e non avere spazi e caratteri strani nei path). Ti ritrovi in queste istruzioni?

la patch è per il kernel o per la dsdt?

se è per il kernel devi verificare che non ci siano dei .rej nell'albero dei sorgenti, il kernel gentoo è già pezzottato (termine italiano derivato dalla lingua napoletana per il barbarismo patchato) di suo e una parte della patch potrebbe non essere stata inclusa perchè non allineata (si apetta che l'istruzione x sia alla line 123 del file y.c mentre è nel file y.c ma alla linea 129, in tal caso la applichi manualmente e via);

se invece è per il dsdt devi controllare che la versione del bios corrisponda e del kernel non te frega nulla perchè l'unico legame è l'istruzione di dire al bios di caricare la nuova dsdt invece di quella di default, e sempre verificare che non ci siano dei rej e che non esista già in un'altra posizione 

```
Method (LIDE, 0, NotSerialized)
```

.

hai provato a cercare su http://acpi.sourceforge.net/dsdt/view.php se c'è il tuo modello di portatile? prova ad usare quella dsdt se c'è. Mi sa che il tuo non è un dell 640m o lo è?

per fare il fix di una dsdt ti conviene prima cercare di risolvere gli errori sulla originale e poi applicare eventuali patch. Sistemando come? hai semplicemente cancellato l'asterisco o hai verificato come sono scritte le assegnazioni Name (_HID, "...")?

nella mia dsdt per esempio sono tutte "PNPxxxx" ma non è una certezza.

In più, deve esserci il method LIDE per rilevare il coperchio ma deve anche esserci in WAKE la chiamata a LIDE, altrimenti non funziona. Più o meno è come in normale programma c.

Ti ripeto il consiglio vai su http://acpi.sourceforge.net e chiedi aiuto non è una cosa da modificare alla buona e rischi di fare danni molto seri.

tanto per curiosità puoi mettere su pastebin o come diavolo si chiama la dsdt incriminata? Non prometto nulla ma se trovo un poco di tempo do uno sguardo.

----------

## Elbryan

Sei troppo gentile.. 

Allora. Sì, il mio è un dell 640m e, purtroppo, non è listato su acpi.sourceforge.net.

Questo è il dsdt.dsl decompilato ed originale: http://rafb.net/p/5hSgR451.html

Questo è il dsdt patchato con la patch che trovi al primo post di questo thread: http://rafb.net/p/J5ED9r33.html

Questo è l'output di iasl -tc dsdt.dsl:

```

blackbox dsdt # iasl -tc dsdt.dsl

Intel ACPI Component Architecture

ASL Optimizing Compiler version 20060912 [Sep 29 2007]

Copyright (C) 2000 - 2006 Intel Corporation

Supports ACPI Specification Revision 3.0a

dsdt.dsl  1066:             Name (_HID, "*pnp0c14")

Error    4001 -                                  ^ String must be entirely alphanumeric (*pnp0c14)

dsdt.dsl  2840:                         And (Local0, 0x0F)

Warning  1104 -                                   ^ Result is not used, operator has no effect

dsdt.dsl  2898:                         And (Local0, 0x0F)

Warning  1104 -                                   ^ Result is not used, operator has no effect

dsdt.dsl  2956:                         And (Local0, 0x0F)

Warning  1104 -                                   ^ Result is not used, operator has no effect

dsdt.dsl  3014:                         And (Local0, 0x0F)

Warning  1104 -                                   ^ Result is not used, operator has no effect

dsdt.dsl  3072:                         And (Local0, 0x0F)

Warning  1104 -                                   ^ Result is not used, operator has no effect

dsdt.dsl  3130:                         And (Local0, 0x0F)

Warning  1104 -                                   ^ Result is not used, operator has no effect

dsdt.dsl  3188:                         And (Local0, 0x0F)

Warning  1104 -                                   ^ Result is not used, operator has no effect

dsdt.dsl  3246:                         And (Local0, 0x0F)

Warning  1104 -                                   ^ Result is not used, operator has no effect

dsdt.dsl  3715:                     Return (Package (0x00) {})

Remark   5070 -    Effective AML package length is zero ^ 

ASL Input:  dsdt.dsl - 4702 lines, 148834 bytes, 1511 keywords

Compilation complete. 1 Errors, 8 Warnings, 1 Remarks, 545 Optimizations

```

Sistemando lo "*" (ovvero togliendolo), l'errore non c'è più..

Io di ste cose non ne ho mai fatte, mai patchato un kernel.. e ti dirò.. andare un po' alla cieca quando si lavora su ste cose non mi ispira molto.

Comunque ti ringrazio davvero tanto nel frattempo ^^

----------

## djinnZ

 *Elbryan wrote:*   

> il mio è un dell 640m e, purtroppo, non è listato su acpi.sourceforge.net.

 

uhm, ti conviene proprio iscriverti sulla ML e chiedere a qualcuno che ne sa sul serio. Tra l'altro dovresti vedere di sapere se il tizio che ha escogitato la patch ha la tua stessa versione del bios. 

in ogni caso il valore corretto dovrebbe essere "PNP0C14" maiuscolo e non minuscolo, prova se funziona per prima cosa con la dsdt originale, i warning li puoi ignorare per il momento.

Poi prova con quella patchata (vedi che ogni volta che cambi la dsdt devi ricompilare tutto il kernel ed il file giusto dovrebbe essere il dsdt.hex) e fai sapere.

----------

## Elbryan

 *djinnZ wrote:*   

>  *Elbryan wrote:*   il mio è un dell 640m e, purtroppo, non è listato su acpi.sourceforge.net. 
> 
> uhm, ti conviene proprio iscriverti sulla ML e chiedere a qualcuno che ne sa sul serio. Tra l'altro dovresti vedere di sapere se il tizio che ha escogitato la patch ha la tua stessa versione del bios. 
> 
> in ogni caso il valore corretto dovrebbe essere "PNP0C14" maiuscolo e non minuscolo, prova se funziona per prima cosa con la dsdt originale, i warning li puoi ignorare per il momento.
> ...

 

io ho un dubbio.. che override devo prendere? ^^''

----------

## djinnZ

http://vger.kernel.org/vger-lists.html#linux-acpi

o

https://lists.osdl.org/mailman/listinfo/linux-pm

se dai uno sguardo qui potresti anche pensare di aggiungerti alla discussione.

----------

## Elbryan

 *djinnZ wrote:*   

> http://vger.kernel.org/vger-lists.html#linux-acpi
> 
> o
> 
> https://lists.osdl.org/mailman/listinfo/linux-pm
> ...

 

e che faccio? già il tipo ha postato la patch e nessuno gli ha risposto..

penso che io e la mia ignoranza siano ben di poco aiuto lì dentro  :Smile: 

edit:

http://bugzilla.kernel.org/show_bug.cgi?id=5155#c6

Guarda guarda..a quanto pare qualcuno ha postato qualche sorta di workaround ma.. ad essere sincero non ci capisco nulla..

Cioè.. nulla è relativo, capisco dove hanno modificato e capisco anche ora il perché (o quasi) non vada ma da lì a capire come sistemarlo.. beh ne passa..

----------

## djinnZ

in primis tenere d'occhio il bug  :Wink: 

poi secondo il grado di faccia tosta

"bump"?

scocciare anche in ML per far seguire la cosa?

postare un banale messaggio sempre nella prima ML e dire "sono niubbo ed ho un problema con un dell 640m"?

anche tutti insieme. In fin dei conti nel peggiore dei casi ti possono mandare a c***** ma niente di più.

(e questa è la volta buona che drittzt e scen in quanto devel frequentatori di questo forum pagano qualcuno che venga a spezzarmi le gambe, non è proprio correttissimo ma tutto è lecito  :Laughing:  )

----------

