浏览代码

base-files: gpio switch: check if direction can be set

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 <[email protected]>
Mathias Kresin 7 年之前
父节点
当前提交
acafbac4b3
共有 2 个文件被更改,包括 10 次插入3 次删除
  1. 1 1
      package/base-files/Makefile
  2. 9 2
      package/base-files/files/etc/init.d/gpio_switch

+ 1 - 1
package/base-files/Makefile

@@ -12,7 +12,7 @@ include $(INCLUDE_DIR)/version.mk
 include $(INCLUDE_DIR)/feeds.mk
 include $(INCLUDE_DIR)/feeds.mk
 
 
 PKG_NAME:=base-files
 PKG_NAME:=base-files
-PKG_RELEASE:=183
+PKG_RELEASE:=184
 PKG_FLAGS:=nonshared
 PKG_FLAGS:=nonshared
 
 
 PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/
 PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/

+ 9 - 2
package/base-files/files/etc/init.d/gpio_switch

@@ -23,8 +23,15 @@ load_gpio_switch()
 		# we need to wait a bit until the GPIO appears
 		# we need to wait a bit until the GPIO appears
 		[ -d "$gpio_path" ] || sleep 1
 		[ -d "$gpio_path" ] || sleep 1
 	}
 	}
-	# set the pin to output with high or low pin value
-	{ [ "$value" = "0" ] && echo "low" || echo "high"; } >"$gpio_path/direction"
+
+	# 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()
 service_triggers()