1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- #!/bin/sh /etc/rc.common
- # Copyright (C) 2008 OpenWrt.org
- START=90
- CONFIGFS_DIR="/config/gpiommc"
- # add_device(name, DI_pin, DO_pin, CLK_pin, CS_pin, mode)
- add_device() {
- local dir="$CONFIGFS_DIR/$1"
- mkdir -p $dir
- [ $? -eq 0 ] || return 1
- echo $2 > $dir/gpio_data_in
- [ $? -eq 0 ] || return 1
- echo $3 > $dir/gpio_data_out
- [ $? -eq 0 ] || return 1
- echo $4 > $dir/gpio_clock
- [ $? -eq 0 ] || return 1
- echo $5 > $dir/gpio_chipselect
- [ $? -eq 0 ] || return 1
- echo $6 > $dir/spi_mode
- [ $? -eq 0 ] || return 1
- # XXX We have more config options available. Use defaults for now.
- echo 1 > $dir/register
- [ $? -eq 0 ] || return 1
- return 0
- }
- # remove_device(name)
- remove_device() {
- local dir="$CONFIGFS_DIR/$1"
- rmdir $dir
- }
- mount_configfs() {
- # FIXME: This should probably be done somewhere else.
- mount | grep configfs
- if [ $? -eq 0 ]; then
- # already mounted
- return 0
- fi
- mkdir -p /config
- [ $? -eq 0 ] || return 1
- mount configfs -t configfs /config
- [ $? -eq 0 ] || return 1
- return 0
- }
- start_service() {
- local section="$1"
- config_get "name" "$section" "name"
- config_get "DI_pin" "$section" "DI_pin"
- config_get "DO_pin" "$section" "DO_pin"
- config_get "CLK_pin" "$section" "CLK_pin"
- config_get "CS_pin" "$section" "CS_pin"
- config_get "mode" "$section" "mode"
- config_get_bool "enabled" "$section" "enabled" '1'
- [ "$enabled" -gt 0 ] && add_device "$name" $DI_pin $DO_pin $CLK_pin $CS_pin $mode &
- }
- stop_service() {
- local section="$1"
- config_get "name" "$section" "name"
- remove_device "$name"
- }
- start() {
- # Make sure configfs is mounted
- mount_configfs
- [ $? -eq 0 ] || return 1
- config_load "mmc_over_gpio"
- config_foreach start_service "mmc_over_gpio"
- }
- stop() {
- config_load "mmc_over_gpio"
- config_foreach stop_service "mmc_over_gpio"
- }
|