 acafbac4b3
			
		
	
	acafbac4b3
	
	
	
		
			
			Obviously not all GPIO controller allow to change the direction. The issue is around since the beginning of the script but only due to the recent changes error messages are more visible. Add a check if a change of the direction is supported by the GPIO controller and fallback to setting only the value if not. Fixes: FS#1271 Signed-off-by: Mathias Kresin <dev@kresin.me>
		
			
				
	
	
		
			49 lines
		
	
	
		
			1013 B
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1013 B
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/sh /etc/rc.common
 | |
| # Copyright (C) 2015 OpenWrt.org
 | |
| 
 | |
| START=94
 | |
| STOP=10
 | |
| USE_PROCD=1
 | |
| 
 | |
| 
 | |
| load_gpio_switch()
 | |
| {
 | |
| 	local name
 | |
| 	local gpio_pin
 | |
| 	local value
 | |
| 
 | |
| 	config_get gpio_pin "$1" gpio_pin
 | |
| 	config_get name "$1" name
 | |
| 	config_get value "$1" value 0
 | |
| 
 | |
| 	local gpio_path="/sys/class/gpio/gpio${gpio_pin}"
 | |
| 	# export GPIO pin for access
 | |
| 	[ -d "$gpio_path" ] || {
 | |
| 		echo "$gpio_pin" >/sys/class/gpio/export
 | |
| 		# we need to wait a bit until the GPIO appears
 | |
| 		[ -d "$gpio_path" ] || sleep 1
 | |
| 	}
 | |
| 
 | |
| 	# direction attribute only exists if the kernel supports changing the
 | |
| 	# direction of a GPIO
 | |
| 	if [ -e "${gpio_path}/direction" ]; then
 | |
| 		# set the pin to output with high or low pin value
 | |
| 		{ [ "$value" = "0" ] && echo "low" || echo "high"; } >"$gpio_path/direction"
 | |
| 	else
 | |
| 		{ [ "$value" = "0" ] && echo "0" || echo "1"; } >"$gpio_path/value"
 | |
| 	fi
 | |
| }
 | |
| 
 | |
| service_triggers()
 | |
| {
 | |
| 	procd_add_reload_trigger "system"
 | |
| }
 | |
| 
 | |
| start_service()
 | |
| {
 | |
| 	[ -e /sys/class/gpio/ ] && {
 | |
| 		config_load system
 | |
| 		config_foreach load_gpio_switch gpio_switch
 | |
| 	}
 | |
| }
 |