mirror of
git://projects.qi-hardware.com/iris.git
synced 2025-04-21 12:27:27 +03:00
add partial nand and sd/mmc drivers
This commit is contained in:
@@ -165,22 +165,24 @@ unsigned const DevKbd::keys[NUM_KEYS] = {
|
||||
#endif
|
||||
}
|
||||
|
||||
class PowerButton:
|
||||
class Event:
|
||||
bool state, started
|
||||
unsigned pin
|
||||
Iris::Cap cb
|
||||
public:
|
||||
void scan ():
|
||||
if !started:
|
||||
return
|
||||
gpio_mask_irq (3, 1 << 29)
|
||||
bool s = gpio_get_port (3) & (1 << 29)
|
||||
gpio_mask_irq (3, 1 << pin)
|
||||
bool s = gpio_get_port (3) & (1 << pin)
|
||||
if s != state:
|
||||
state = s
|
||||
cb.invoke (state ? Iris::Keyboard::RELEASE : 0)
|
||||
gpio_as_interrupt (3, 1 << 29, !state, true)
|
||||
gpio_unmask_irq (3, 1 << 29)
|
||||
PowerButton ():
|
||||
gpio_as_gpio (3, 29)
|
||||
gpio_as_interrupt (3, 1 << pin, !state, true)
|
||||
gpio_unmask_irq (3, 1 << pin)
|
||||
Event (unsigned p):
|
||||
pin = p
|
||||
gpio_as_gpio (3, pin)
|
||||
state = true
|
||||
started = false
|
||||
void set_cb (Iris::Cap c):
|
||||
@@ -195,19 +197,24 @@ class PowerButton:
|
||||
enum codes:
|
||||
KBD_DEV = 32
|
||||
PWR
|
||||
SDMMC
|
||||
|
||||
Iris::Num start ():
|
||||
map_gpio ()
|
||||
|
||||
DevKbd kbd
|
||||
PowerButton pwr
|
||||
Event pwr (29)
|
||||
Event sdmmc (0)
|
||||
|
||||
Iris::Device dev = Iris::my_receiver.create_capability (KBD_DEV)
|
||||
Iris::Keyboard dev = Iris::my_receiver.create_capability (KBD_DEV)
|
||||
Iris::Keyboard pw = Iris::my_receiver.create_capability (PWR)
|
||||
Iris::Event sm = Iris::my_receiver.create_capability (SDMMC)
|
||||
Iris::my_parent.provide_capability <Iris::Keyboard> (dev.copy (), 0)
|
||||
Iris::my_parent.provide_capability <Iris::Keyboard> (pw.copy (), 1)
|
||||
Iris::my_parent.provide_capability <Iris::Event> (sm.copy ())
|
||||
Iris::free_cap (dev)
|
||||
Iris::free_cap (pw)
|
||||
Iris::free_cap (sm)
|
||||
Iris::my_parent.init_done ()
|
||||
if kbd.scanning ():
|
||||
Iris::my_receiver.set_alarm (SCAN_INTERVAL)
|
||||
@@ -225,6 +232,7 @@ Iris::Num start ():
|
||||
// Interrupt.
|
||||
pwr.scan ()
|
||||
kbd.scan ()
|
||||
sdmmc.scan ()
|
||||
if kbd.scanning ():
|
||||
Iris::my_receiver.set_alarm (SCAN_INTERVAL)
|
||||
Iris::register_interrupt (IRQ_GPIO3)
|
||||
@@ -235,7 +243,7 @@ Iris::Num start ():
|
||||
case Iris::Device::RESET:
|
||||
Iris::recv.reply.invoke ()
|
||||
break
|
||||
case Iris::Keyboard::SET_CB:
|
||||
case Iris::Event::SET_CB:
|
||||
Iris::Cap reply = Iris::get_reply ()
|
||||
kbd.active (Iris::get_arg ())
|
||||
reply.invoke ()
|
||||
@@ -256,7 +264,7 @@ Iris::Num start ():
|
||||
case Iris::Device::RESET:
|
||||
Iris::recv.reply.invoke ()
|
||||
break
|
||||
case Iris::Keyboard::SET_CB:
|
||||
case Iris::Event::SET_CB:
|
||||
Iris::Cap reply = Iris::get_reply ()
|
||||
pwr.set_cb (Iris::get_arg ())
|
||||
reply.invoke ()
|
||||
@@ -268,6 +276,23 @@ Iris::Num start ():
|
||||
kdebug ("\n")
|
||||
break
|
||||
break
|
||||
case SDMMC:
|
||||
switch Iris::recv.data[0].l:
|
||||
case Iris::Device::RESET:
|
||||
Iris::recv.reply.invoke ()
|
||||
break
|
||||
case Iris::Event::SET_CB:
|
||||
Iris::Cap reply = Iris::get_reply ()
|
||||
sdmmc.set_cb (Iris::get_arg ())
|
||||
reply.invoke ()
|
||||
Iris::free_cap (reply)
|
||||
break
|
||||
default:
|
||||
kdebug ("SdMmc gpio invalid request\n")
|
||||
kdebug_num (Iris::recv.data[0].l)
|
||||
kdebug ("\n")
|
||||
break
|
||||
break
|
||||
default:
|
||||
kdebug ("keyboard unknown num: ")
|
||||
kdebug_num (Iris::recv.protected_data.h)
|
||||
|
||||
Reference in New Issue
Block a user