Kernel/it

From Openmoko

Revision as of 14:58, 6 July 2008 by Glenn (Talk | contribs)

Jump to: navigation, search

Contents

Informazioni generali

Il kernel del GTA01 è basato sul kernel Linux 2.6.21.3 (come da kernel.org).

Le patch aggiunte riguardano:

  • S3C2410 USB Device Controller
    • recuperata dal progetto "iPaq H1940 Linux")
  • S3C2410 SD Card Controller
  • QT2410 machine support
    • pezzi di codice per mettere insieme tutte le aggiunte
  • S3C2410 touch screen driver
    • anche questo recuperato dal progetto "iPaq H1940 Linux"
  • GTA01 machine support
    • configurazione e codice specifico per tenere insieme tutti i pezzi
  • GSM Communication Infrastructure
    • la parte del kernel relativa alle line discipline TS07.10 e GPRS

Il patchset del kernel

L'insieme di tutte le patch sopra citate, da aggiungere al kernel Linux sopra indicato, è reperibile all'indirizzo https://svn.openmoko.org/trunk/src/target/kernel/patches/ Si tratta di un cosiddetto quilt patchset. Una volta prelevato, si può applicare ad un kernel Linux piazzandolo nella sua directory "patches" (sotto la directory "linux-2.6.x") ed eseguendo "quilt push -a".

Pre esempio, dopo aver decompresso il kernel "linux-2.6.21.1.tar.gz", si possono eseguire questi comandi:

   cd linux-2.6.21.1
   svn co https://svn.openmoko.org/trunk/src/target/kernel/patches
   quilt push -a

(nota: questo è solo un esempio; la versione del kernel Linux da utilizzare potrebbe essere più recente, come indicato nella sezione precedene di questa stessa pagina).

Configurazione del kernel Linux

L'ultima versione del file di configurazione del kernel può essere recuperata da https://svn.openmoko.org/trunk/oe/packages/linux/linux-gta01/ (basta copiare tale file di configurazione nella directory "linux-2.6.x" e rinominarlo ".config").

Compilazione del kernel

La compilazione del kernel si esegue normalmente col "make"; attualmente serve solo il target "vmlinux", non è necessaria la "zImage".

Kernel precompilati pronti per l'uso

Dei kernel già compilati per il boot, chiamati uImage*, sono disponibili qui:

In tal caso occorre prelevare anche i moduli utilizzati dal kernel (disponibili da quella stessa pagina col nome di modules* con lo stesso numero di versione), da mettere poi nella rootfs (attenzione: non tutti i moduli in questione potrebbero essere veramente indispensabili nell'installazione).

In alternativa si può prelevare il pacchetto completo del kernel (comprensivo dei moduli), installabile con ipkg, da qui:

Moduli per il Neo1973 GTA01

Sul Neo1973 GTA01 sono necessari almeno questi moduli:

  • snd-soc-neo1973-wm8753 snd-soc-s3c24xx-i2s snd-soc-s3c24xx snd-soc-wm8753
  • ohci-hcd
  • bluetooth hci-usb
  • fat vfat msdos nsl-base nls_iso8859_1 nls_cp437

È necessario che tali moduli siano presenti nella root image (cfr. bug 580).

Probabilmente sarà sufficiente indicare la lista di almeno questi moduli in un file sotto "/etc/modutils/" per poi eseguire "update-modules" per farli funzionare correttamente:

  • hci_usb
  • s3cmci
  • snd-soc-neo1973-wm8753

Creazione di un kernel pronto per il boot

u-boot necessita di tutti i file (kernel, initrd, ...) nel formato uImage, che in fin dei conti contiene solo alcune informazioni addizionali all'inizio (controllo CRC, versione, etc). Vedere u-boot per i dettagli.

Parametri di boot del kernel

Dato che il QT2410 può essere utilizzato con differenti schermi LCD (liquid crystal modules: LCM), per il caricamento del kernel è disponibile un parametro "tft" specificabile al boot:

  • col boot senza parametro "tft=" si assume per default uno schermo TFT 240x320
  • col parametro "tft=b" ('b' sta per "big"), vengono selezionati i timing per lo schermo Sharp 8" 640x480
  • col parametro "tft=p" ('p' sta per "production"), vengono selezionati i timing per lo schermo TFT 2.8" 480x640.

Sottosistemi del kernel

In questa sezione ci sono alcune note sui sottosistemi specifici del GTA01, e sui relativi driver.

GSM

Power Management

Il driver gta01_pm_gsm implementa le procedure di risparmio energetico della sezione GSM (pertanto, se compilato come modulo gta01_pm_gsm.ko, va caricato prima dell'utilizzo).

Tale driver esporta questa interfaccia basata sul sysfs:

root@fic-gta01:/$ ls -l /sys/bus/platform/devices/gta01-pm-gsm.0/
-rw-r--r--    1 root     root         4096 Feb  1 09:58 download
-rw-r--r--    1 root     root         4096 Feb  1 09:58 power_on
-rw-r--r--    1 root     root         4096 Feb  1 09:58 reset
Accensione
root@fic-gta01:~$ echo "1" > /sys/bus/platform/devices/gta01-pm-gsm.0/power_on 
gta01-pm-gsm gta01-pm-gsm.0: powering up GSM, thus disconnecting serial console
Spegnimento
root@fic-gta01:~$ echo "0" > /sys/bus/platform/devices/gta01-pm-gsm.0/power_on 
gta01-pm-gsm gta01-pm-gsm.0: powered down GSM, thus enabling serial console
Reset
root@fic-gta01:~$ echo "1" > /sys/bus/platform/devices/gta01-pm-gsm.0/reset 
root@fic-gta01:~$ echo "0" > /sys/bus/platform/devices/gta01-pm-gsm.0/reset 
Attivazione del modo GSM baseband download
root@fic-gta01:~$ echo "1" > /sys/bus/platform/devices/gta01-pm-gsm.0/download
Disattivazione del GSM baseband download
root@fic-gta01:~$ echo "0" > /sys/bus/platform/devices/gta01-pm-gsm.0/download

GPS

Risparmio energetico

Il modulo gta01_pm_gps del kernel pure offre un'interfaccia basata sul sysfs:

root@fic-gta01:~$ ls -l /sys/bus/platform/devices/gta01-pm-gps.0/     
-rw-r--r--    1 root     root         4096 Feb  1 09:14 power_avdd_3v
-rw-r--r--    1 root     root         4096 Feb  1 09:14 power_lp_io_3v3
-rw-r--r--    1 root     root         4096 Feb  1 09:14 power_pll_core_2v5
-rw-r--r--    1 root     root            0 Feb  1 09:14 power_sequence
-rw-r--r--    1 root     root         4096 Feb  1 09:14 power_vtxco_2v8
-rw-r--r--    1 root     root         4096 Feb  1 09:14 pwron
-rw-r--r--    1 root     root         4096 Feb  1 09:14 reset

I vari power_avdd_3v, power_lp_io_3v3, power_pll_core_2v5, power_vtxco_2v8, pwron e reset rappresentano lo stato dei segnali omonimi.

Il file power_sequence implementa invece l'accensione o spegnimento secondo quanto prescritto dal datasheet del GlobalLocate.

Accensione
root@fic-gta01:~$ echo "power_up" > /sys/bus/platform/devices/gta01-pm-gps.0/power_sequence 
Spegnimento
root@fic-gta01:~$ echo "power_down" > /sys/bus/platform/devices/gta01-pm-gps.0/power_sequence

Driver Asound

Requisiti di livello più alto

Nonostante il sistema audio del GTA01 sia alquanto complesso, i requisiti di livello più alto per il suo driver sono abbastanza semplici. Le caratteristiche indispensabili sono:

  • chiamate vocali
    • connettere il segnale del microfono al modem GSM
    • connettere l'audio del modem GSM con l'altoparlante integrato
    • configurare il mixer del microfono secondo le esigenze del momento
    • configurare il volume dell'audio ricevuto dal microfono prima di passarlo al line-out
    • configurare il volume audio del microfono prima di passarlo all'altoparlante integrato
  • registrazione delle chiamate vocali
    • l'utente può registrare le conversazioni sulla memoria interna, in formato OGG (questo dettaglio non è importante per il driver)
    • l'utente potrebbe scegliere di registrare solo l'audio ricevuto, solo l'audio inviato, o entrambi
    • per entrambi, sarà necessario miscelare le due sorgenti audio (microfono e line-in) prima di registrare: è possibile?
  • supporto per "voice call playback"
    • l'utente deve poter "suonare" dei file audio durante una conversazione (questo significa che l'output PCM deve essere miscelato con l'input del microfono prima di essere passato al line-out e al modem GSM)
  • media playback
    • un software audio player deve poter suonare file audio (mp3/ogg/flac/...) sia sugli altoparlanti integrati che sulle cuffie
  • switch presenza cuffie
    • questo è connesso ad una GPIO del S3C2410. Come integrarlo bene col driver audio? Andrebbe utilizzato al pari di qualsiasi altra apparecchiatura simile (come per esempio i computer laptop: la presenza delle cuffie disabilita automaticamente gli altoparlanti integrati).

Per maggiori dettagli, vedere Neo1973 Audio Subsystem

Bluetooth

Viene utilizzata l'implementazione bluez presente nei kernel Linux.

Risparmio energetico

Il sistema bluetooth ha tre prerequisiti:

  • BT_EN (abilitazione bluetooth) deve essere attivo
  • il rispettivo regolatore di tensione correttamente inizializzato
  • il driver ohci-hcd (supporto USB) già caricato

Il driver gta01_pm_bt è controllabile via sysfs:

root@fic-gta01:/$ ls -l /sys/bus/platform/devices/gta01-pm-bt.0
-rw-r--r--    1 root     root         4096 Feb  1 09:52 power_on
-rw-r--r--    1 root     root         4096 Feb  1 09:52 reset
Accensione
root@fic-gta01:/$ echo "1" > /sys/bus/platform/devices/gta01-pm-bt.0/power_on
usb 1-1: new full speed USB device using s3c2410-ohci and address 4
usb 1-1: configuration #1 chosen from 1 choice
Spegnimento
root@fic-gta01:/$ echo "0" > /sys/bus/platform/devices/gta01-pm-bt.0/power_on 
usb 1-1: USB disconnect, address 3
Attivazione procedura di reset (attivo basso)
root@fic-gta01:/$ echo "0" >  /sys/bus/platform/devices/gta01-pm-bt.0/reset 
root@fic-gta01:/$ usb 1-1: USB disconnect, address 2
Disattivazione del reset (low-active)
root@fic-gta01:/$ echo "1" >  /sys/bus/platform/devices/gta01-pm-bt.0/reset 
s3c2410-ohci s3c2410-ohci: wakeup
usb 1-1: new full speed USB device using s3c2410-ohci and address 3
usb 1-1: configuration #1 chosen from 1 choice

Inizializzazione

Esempio:

root@fic-gta01:~$ hciconfig hci0 up
root@fic-gta01:~$ hcitool  scan
Scanning ...
        00:14:9A:77:A2:02       A780
root@fic-gta01:~$ hcitool inq 00:14:9A:77:A2:02 
Inquiring ...
        00:14:9A:77:A2:02       clock offset: 0x55df    class: 0x502204
root@fic-gta01:~$ hcitool cc 00:14:9A:77:A2:02 
root@fic-gta01:~$ hcitool con                 
Connections:
        < ACL 00:14:9A:77:A2:02 handle 42 state 1 lm MASTER 
root@fic-gta01:~$ hcitool info 00:14:9A:77:A2:02
Requesting information ...
        BD Address:  00:14:9A:77:A2:02
        Device Name: A780
        LMP Version: 1.1 (0x1) LMP Subversion: 0x700
        Manufacturer: Broadcom Corporation (15)
        Features: 0xff 0xff 0x0d 0x00 0x00 0x00 0x00 0x00
                <3-slot packets> <5-slot packets> <encryption> <slot offset> 
                <timing accuracy> <role switch> <hold mode> <sniff mode> 
                <park state> <RSSI> <channel quality> <SCO link> <HV2 packets> 
                <HV3 packets> <u-law log> <A-law log> <CVSD> <power control> 
                <transparent SCO> 

Bottone AUX

Il bottone AUX (precedentemente indicato come bottone "9-1-1") è supportato dal driver della tastiera (gta01kbd) nel kernel (drivers/input/keyboard/gta01kbd.c).

Tale bottone è associato a eventi "KEY_PHONE" (tasto premuto/rilasciato).

Power Management Unit (PMU)

La PMU (Unità di gestione energia) è supportata dal driver "pcf50606" del kernel (drivers/i2c/chips/pcf50606.c).

Questo driver fornisce numerose interfacce nell'user-space per le varie funzionalità della PMU.

Bottone di accensione e inserimento del caricabatteria

La PMU crea un device di input che supporta questi tre "tasti":

  • KEY_POWER: bottone di accensione del GTA01
  • KEY_POWER2: inserimento/rimozione del caricabatteria da porta USB
  • KEY_BATTERY: inserimento/rimozione del caricabatteria in modalità normale

RTC

L'orologio interno (real-time-clock), comprese le funzionalità di sveglia, è implementato con l'interfaccia standard RTC (/dev/rtc).

Watchdog

Il watchdog integrato nella PMU è implementato con il character-device apposito del kernel.

Regolatori di tensione

I regolatori di tensione sono accessibili in user-space attraverso il sysfs (un po' come i noti lm_sensors); i valori possono essere oltre che letti, perfino scritti; il formato è in ASCII, e il valore indica i millivolt.

root@fic-gta01:/sys/devices/platform/s3c2410-i2c/i2c-0/0-0008$ ls -l /sys/bus/i2c/devices/0-0008/voltage_*
-rw-r--r--    1 root     root         4096 Sep  3 11:55 /sys/bus/i2c/devices/0-0008/voltage_d1reg
-rw-r--r--    1 root     root         4096 Sep  3 11:55 /sys/bus/i2c/devices/0-0008/voltage_d2reg
-rw-r--r--    1 root     root         4096 Sep  3 11:55 /sys/bus/i2c/devices/0-0008/voltage_d3reg
-rw-r--r--    1 root     root         4096 Sep  3 11:55 /sys/bus/i2c/devices/0-0008/voltage_dcd
-rw-r--r--    1 root     root         4096 Sep  3 11:55 /sys/bus/i2c/devices/0-0008/voltage_dcde
-rw-r--r--    1 root     root         4096 Sep  3 11:55 /sys/bus/i2c/devices/0-0008/voltage_dcud
-rw-r--r--    1 root     root         4096 Sep  3 11:55 /sys/bus/i2c/devices/0-0008/voltage_lpreg
-rw-r--r--    1 root     root         4096 Sep  3 11:55 /sys/bus/i2c/devices/0-0008/voltage_ioreg
root@fic-gta01:/sys/devices/platform/s3c2410-i2c/i2c-0/0-0008$ cat voltage_dcd
1300

Tensione della batteria

Il voltaggio della batteria (in millivolt) può essere letto sempre attraverso il sysfs:

root@fic-gta01:~$ cat /sys/bus/i2c/devices/0-0008/battvolt 
3767

Corrente di carica della batteria

L'intensità della corrente nella carica della batteria (espressa in milliampére) può essere letta da sysfs:

root@fic-gta01:~$ cat /sys/bus/i2c/devices/0-0008/chgcur 
0

Temperatura della batteria

La temperatura della batteria (in gradi centigradi) può essere letta via sysfs:

root@fic-gta01:~$ cat /sys/bus/i2c/devices/0-0008/battemp
25

Kernel (DA COMPLETARE)

Varie

  • accelerare il boot del kernel
    • ridurre/eliminare il delay calibration
    • l'inizializzazione del framebuffer dura secoli

TS07.10 multiplex

PCF50606

  • correggere i problemi di conversione nell'impostare data/ora della sveglia
  • controllare la tabella di conversione delle temperature
  • implementare 'sveglia persistente' (cfr. mail da mickey)

Retroilluminazione

  • più in là, implementare lo smooth fade-in/fade-out

Vibrazione

  • implementarla come un driver dei LED
  • provarla
  • più avanti: implementare PWM

Device driver USB

  • provare il passaggio tra USB-host e USB-device

Power Management

  • provare e verificare:
    • IRQ dalla sezione GSM
    • IRQ dalla PMU (inserimento/eliminazione del caricabatterie, o simili)
    • inserimento/eliminazione del jack delle cuffie

Mailing-list

Lo sviluppo del Kernel è discusso nella mailing-list openmoko-kernel@lists.openmoko.org

Personal tools

Informazioni generali

Il kernel del GTA01 è basato sul kernel Linux 2.6.21.3 (come da kernel.org).

Le patch aggiunte riguardano:

  • S3C2410 USB Device Controller
    • recuperata dal progetto "iPaq H1940 Linux")
  • S3C2410 SD Card Controller
  • QT2410 machine support
    • pezzi di codice per mettere insieme tutte le aggiunte
  • S3C2410 touch screen driver
    • anche questo recuperato dal progetto "iPaq H1940 Linux"
  • GTA01 machine support
    • configurazione e codice specifico per tenere insieme tutti i pezzi
  • GSM Communication Infrastructure
    • la parte del kernel relativa alle line discipline TS07.10 e GPRS

Il patchset del kernel

L'insieme di tutte le patch sopra citate, da aggiungere al kernel Linux sopra indicato, è reperibile all'indirizzo https://svn.openmoko.org/trunk/src/target/kernel/patches/ Si tratta di un cosiddetto quilt patchset. Una volta prelevato, si può applicare ad un kernel Linux piazzandolo nella sua directory "patches" (sotto la directory "linux-2.6.x") ed eseguendo "quilt push -a".

Pre esempio, dopo aver decompresso il kernel "linux-2.6.21.1.tar.gz", si possono eseguire questi comandi:

   cd linux-2.6.21.1
   svn co https://svn.openmoko.org/trunk/src/target/kernel/patches
   quilt push -a

(nota: questo è solo un esempio; la versione del kernel Linux da utilizzare potrebbe essere più recente, come indicato nella sezione precedene di questa stessa pagina).

Configurazione del kernel Linux

L'ultima versione del file di configurazione del kernel può essere recuperata da https://svn.openmoko.org/trunk/oe/packages/linux/linux-gta01/ (basta copiare tale file di configurazione nella directory "linux-2.6.x" e rinominarlo ".config").

Compilazione del kernel

La compilazione del kernel si esegue normalmente col "make"; attualmente serve solo il target "vmlinux", non è necessaria la "zImage".

Kernel precompilati pronti per l'uso

Dei kernel già compilati per il boot, chiamati uImage*, sono disponibili qui:

In tal caso occorre prelevare anche i moduli utilizzati dal kernel (disponibili da quella stessa pagina col nome di modules* con lo stesso numero di versione), da mettere poi nella rootfs (attenzione: non tutti i moduli in questione potrebbero essere veramente indispensabili nell'installazione).

In alternativa si può prelevare il pacchetto completo del kernel (comprensivo dei moduli), installabile con ipkg, da qui:

Moduli per il Neo1973 GTA01

Sul Neo1973 GTA01 sono necessari almeno questi moduli:

  • snd-soc-neo1973-wm8753 snd-soc-s3c24xx-i2s snd-soc-s3c24xx snd-soc-wm8753
  • ohci-hcd
  • bluetooth hci-usb
  • fat vfat msdos nsl-base nls_iso8859_1 nls_cp437

È necessario che tali moduli siano presenti nella root image (cfr. bug 580).

Probabilmente sarà sufficiente indicare la lista di almeno questi moduli in un file sotto "/etc/modutils/" per poi eseguire "update-modules" per farli funzionare correttamente:

  • hci_usb
  • s3cmci
  • snd-soc-neo1973-wm8753

Creazione di un kernel pronto per il boot

u-boot necessita di tutti i file (kernel, initrd, ...) nel formato uImage, che in fin dei conti contiene solo alcune informazioni addizionali all'inizio (controllo CRC, versione, etc). Vedere u-boot per i dettagli.

Parametri di boot del kernel

Dato che il QT2410 può essere utilizzato con differenti schermi LCD (liquid crystal modules: LCM), per il caricamento del kernel è disponibile un parametro "tft" specificabile al boot:

  • col boot senza parametro "tft=" si assume per default uno schermo TFT 240x320
  • col parametro "tft=b" ('b' sta per "big"), vengono selezionati i timing per lo schermo Sharp 8" 640x480
  • col parametro "tft=p" ('p' sta per "production"), vengono selezionati i timing per lo schermo TFT 2.8" 480x640.

Sottosistemi del kernel

In questa sezione ci sono alcune note sui sottosistemi specifici del GTA01, e sui relativi driver.

GSM

Power Management

Il driver gta01_pm_gsm implementa le procedure di risparmio energetico della sezione GSM (pertanto, se compilato come modulo gta01_pm_gsm.ko, va caricato prima dell'utilizzo).

Tale driver esporta questa interfaccia basata sul sysfs:

root@fic-gta01:/$ ls -l /sys/bus/platform/devices/gta01-pm-gsm.0/
-rw-r--r--    1 root     root         4096 Feb  1 09:58 download
-rw-r--r--    1 root     root         4096 Feb  1 09:58 power_on
-rw-r--r--    1 root     root         4096 Feb  1 09:58 reset
Accensione
root@fic-gta01:~$ echo "1" > /sys/bus/platform/devices/gta01-pm-gsm.0/power_on 
gta01-pm-gsm gta01-pm-gsm.0: powering up GSM, thus disconnecting serial console
Spegnimento
root@fic-gta01:~$ echo "0" > /sys/bus/platform/devices/gta01-pm-gsm.0/power_on 
gta01-pm-gsm gta01-pm-gsm.0: powered down GSM, thus enabling serial console
Reset
root@fic-gta01:~$ echo "1" > /sys/bus/platform/devices/gta01-pm-gsm.0/reset 
root@fic-gta01:~$ echo "0" > /sys/bus/platform/devices/gta01-pm-gsm.0/reset 
Attivazione del modo GSM baseband download
root@fic-gta01:~$ echo "1" > /sys/bus/platform/devices/gta01-pm-gsm.0/download
Disattivazione del GSM baseband download
root@fic-gta01:~$ echo "0" > /sys/bus/platform/devices/gta01-pm-gsm.0/download

GPS

Risparmio energetico

Il modulo gta01_pm_gps del kernel pure offre un'interfaccia basata sul sysfs:

root@fic-gta01:~$ ls -l /sys/bus/platform/devices/gta01-pm-gps.0/     
-rw-r--r--    1 root     root         4096 Feb  1 09:14 power_avdd_3v
-rw-r--r--    1 root     root         4096 Feb  1 09:14 power_lp_io_3v3
-rw-r--r--    1 root     root         4096 Feb  1 09:14 power_pll_core_2v5
-rw-r--r--    1 root     root            0 Feb  1 09:14 power_sequence
-rw-r--r--    1 root     root         4096 Feb  1 09:14 power_vtxco_2v8
-rw-r--r--    1 root     root         4096 Feb  1 09:14 pwron
-rw-r--r--    1 root     root         4096 Feb  1 09:14 reset

I vari power_avdd_3v, power_lp_io_3v3, power_pll_core_2v5, power_vtxco_2v8, pwron e reset rappresentano lo stato dei segnali omonimi.

Il file power_sequence implementa invece l'accensione o spegnimento secondo quanto prescritto dal datasheet del GlobalLocate.

Accensione
root@fic-gta01:~$ echo "power_up" > /sys/bus/platform/devices/gta01-pm-gps.0/power_sequence 
Spegnimento
root@fic-gta01:~$ echo "power_down" > /sys/bus/platform/devices/gta01-pm-gps.0/power_sequence

Driver Asound

Requisiti di livello più alto

Nonostante il sistema audio del GTA01 sia alquanto complesso, i requisiti di livello più alto per il suo driver sono abbastanza semplici. Le caratteristiche indispensabili sono:

  • chiamate vocali
    • connettere il segnale del microfono al modem GSM
    • connettere l'audio del modem GSM con l'altoparlante integrato
    • configurare il mixer del microfono secondo le esigenze del momento
    • configurare il volume dell'audio ricevuto dal microfono prima di passarlo al line-out
    • configurare il volume audio del microfono prima di passarlo all'altoparlante integrato
  • registrazione delle chiamate vocali
    • l'utente può registrare le conversazioni sulla memoria interna, in formato OGG (questo dettaglio non è importante per il driver)
    • l'utente potrebbe scegliere di registrare solo l'audio ricevuto, solo l'audio inviato, o entrambi
    • per entrambi, sarà necessario miscelare le due sorgenti audio (microfono e line-in) prima di registrare: è possibile?
  • supporto per "voice call playback"
    • l'utente deve poter "suonare" dei file audio durante una conversazione (questo significa che l'output PCM deve essere miscelato con l'input del microfono prima di essere passato al line-out e al modem GSM)
  • media playback
    • un software audio player deve poter suonare file audio (mp3/ogg/flac/...) sia sugli altoparlanti integrati che sulle cuffie
  • switch presenza cuffie
    • questo è connesso ad una GPIO del S3C2410. Come integrarlo bene col driver audio? Andrebbe utilizzato al pari di qualsiasi altra apparecchiatura simile (come per esempio i computer laptop: la presenza delle cuffie disabilita automaticamente gli altoparlanti integrati).

Per maggiori dettagli, vedere Neo1973 Audio Subsystem

Bluetooth

Viene utilizzata l'implementazione bluez presente nei kernel Linux.

Risparmio energetico

Il sistema bluetooth ha tre prerequisiti:

  • BT_EN (abilitazione bluetooth) deve essere attivo
  • il rispettivo regolatore di tensione correttamente inizializzato
  • il driver ohci-hcd (supporto USB) già caricato

Il driver gta01_pm_bt è controllabile via sysfs:

root@fic-gta01:/$ ls -l /sys/bus/platform/devices/gta01-pm-bt.0
-rw-r--r--    1 root     root         4096 Feb  1 09:52 power_on
-rw-r--r--    1 root     root         4096 Feb  1 09:52 reset
Accensione
root@fic-gta01:/$ echo "1" > /sys/bus/platform/devices/gta01-pm-bt.0/power_on
usb 1-1: new full speed USB device using s3c2410-ohci and address 4
usb 1-1: configuration #1 chosen from 1 choice
Spegnimento
root@fic-gta01:/$ echo "0" > /sys/bus/platform/devices/gta01-pm-bt.0/power_on 
usb 1-1: USB disconnect, address 3
Attivazione procedura di reset (attivo basso)
root@fic-gta01:/$ echo "0" >  /sys/bus/platform/devices/gta01-pm-bt.0/reset 
root@fic-gta01:/$ usb 1-1: USB disconnect, address 2
Disattivazione del reset (low-active)
root@fic-gta01:/$ echo "1" >  /sys/bus/platform/devices/gta01-pm-bt.0/reset 
s3c2410-ohci s3c2410-ohci: wakeup
usb 1-1: new full speed USB device using s3c2410-ohci and address 3
usb 1-1: configuration #1 chosen from 1 choice

Inizializzazione

Esempio:

root@fic-gta01:~$ hciconfig hci0 up
root@fic-gta01:~$ hcitool  scan
Scanning ...
        00:14:9A:77:A2:02       A780
root@fic-gta01:~$ hcitool inq 00:14:9A:77:A2:02 
Inquiring ...
        00:14:9A:77:A2:02       clock offset: 0x55df    class: 0x502204
root@fic-gta01:~$ hcitool cc 00:14:9A:77:A2:02 
root@fic-gta01:~$ hcitool con                 
Connections:
        < ACL 00:14:9A:77:A2:02 handle 42 state 1 lm MASTER 
root@fic-gta01:~$ hcitool info 00:14:9A:77:A2:02
Requesting information ...
        BD Address:  00:14:9A:77:A2:02
        Device Name: A780
        LMP Version: 1.1 (0x1) LMP Subversion: 0x700
        Manufacturer: Broadcom Corporation (15)
        Features: 0xff 0xff 0x0d 0x00 0x00 0x00 0x00 0x00
                <3-slot packets> <5-slot packets> <encryption> <slot offset> 
                <timing accuracy> <role switch> <hold mode> <sniff mode> 
                <park state> <RSSI> <channel quality> <SCO link> <HV2 packets> 
                <HV3 packets> <u-law log> <A-law log> <CVSD> <power control> 
                <transparent SCO> 

Bottone AUX

Il bottone AUX (precedentemente indicato come bottone "9-1-1") è supportato dal driver della tastiera (gta01kbd) nel kernel (drivers/input/keyboard/gta01kbd.c).

Tale bottone è associato a eventi "KEY_PHONE" (tasto premuto/rilasciato).

Power Management Unit (PMU)

La PMU (Unità di gestione energia) è supportata dal driver "pcf50606" del kernel (drivers/i2c/chips/pcf50606.c).

Questo driver fornisce numerose interfacce nell'user-space per le varie funzionalità della PMU.

Bottone di accensione e inserimento del caricabatteria

La PMU crea un device di input che supporta questi tre "tasti":

  • KEY_POWER: bottone di accensione del GTA01
  • KEY_POWER2: inserimento/rimozione del caricabatteria da porta USB
  • KEY_BATTERY: inserimento/rimozione del caricabatteria in modalità normale

RTC

L'orologio interno (real-time-clock), comprese le funzionalità di sveglia, è implementato con l'interfaccia standard RTC (/dev/rtc).

Watchdog

Il watchdog integrato nella PMU è implementato con il character-device apposito del kernel.

Regolatori di tensione

I regolatori di tensione sono accessibili in user-space attraverso il sysfs (un po' come i noti lm_sensors); i valori possono essere oltre che letti, perfino scritti; il formato è in ASCII, e il valore indica i millivolt.

root@fic-gta01:/sys/devices/platform/s3c2410-i2c/i2c-0/0-0008$ ls -l /sys/bus/i2c/devices/0-0008/voltage_*
-rw-r--r--    1 root     root         4096 Sep  3 11:55 /sys/bus/i2c/devices/0-0008/voltage_d1reg
-rw-r--r--    1 root     root         4096 Sep  3 11:55 /sys/bus/i2c/devices/0-0008/voltage_d2reg
-rw-r--r--    1 root     root         4096 Sep  3 11:55 /sys/bus/i2c/devices/0-0008/voltage_d3reg
-rw-r--r--    1 root     root         4096 Sep  3 11:55 /sys/bus/i2c/devices/0-0008/voltage_dcd
-rw-r--r--    1 root     root         4096 Sep  3 11:55 /sys/bus/i2c/devices/0-0008/voltage_dcde
-rw-r--r--    1 root     root         4096 Sep  3 11:55 /sys/bus/i2c/devices/0-0008/voltage_dcud
-rw-r--r--    1 root     root         4096 Sep  3 11:55 /sys/bus/i2c/devices/0-0008/voltage_lpreg
-rw-r--r--    1 root     root         4096 Sep  3 11:55 /sys/bus/i2c/devices/0-0008/voltage_ioreg
root@fic-gta01:/sys/devices/platform/s3c2410-i2c/i2c-0/0-0008$ cat voltage_dcd
1300

Tensione della batteria

Il voltaggio della batteria (in millivolt) può essere letto sempre attraverso il sysfs:

root@fic-gta01:~$ cat /sys/bus/i2c/devices/0-0008/battvolt 
3767

Corrente di carica della batteria

L'intensità della corrente nella carica della batteria (espressa in milliampére) può essere letta da sysfs:

root@fic-gta01:~$ cat /sys/bus/i2c/devices/0-0008/chgcur 
0

Temperatura della batteria

La temperatura della batteria (in gradi centigradi) può essere letta via sysfs:

root@fic-gta01:~$ cat /sys/bus/i2c/devices/0-0008/battemp
25

Kernel (DA COMPLETARE)

Varie

  • accelerare il boot del kernel
    • ridurre/eliminare il delay calibration
    • l'inizializzazione del framebuffer dura secoli

TS07.10 multiplex

PCF50606

  • correggere i problemi di conversione nell'impostare data/ora della sveglia
  • controllare la tabella di conversione delle temperature
  • implementare 'sveglia persistente' (cfr. mail da mickey)

Retroilluminazione

  • più in là, implementare lo smooth fade-in/fade-out

Vibrazione

  • implementarla come un driver dei LED
  • provarla
  • più avanti: implementare PWM

Device driver USB

  • provare il passaggio tra USB-host e USB-device

Power Management

  • provare e verificare:
    • IRQ dalla sezione GSM
    • IRQ dalla PMU (inserimento/eliminazione del caricabatterie, o simili)
    • inserimento/eliminazione del jack delle cuffie

Mailing-list

Lo sviluppo del Kernel è discusso nella mailing-list openmoko-kernel@lists.openmoko.org