--- /dev/null
+PART_NUMBER = bbb-gpio-keypad
+VERSION = 00A0
+
+INCLUDE_PATH = /home/debian/bb.org-overlays/include
+
+compile: $(PART_NUMBER)-$(VERSION).dtbo
+
+install: compile
+ cp $(PART_NUMBER)-$(VERSION).dtbo /lib/firmware
+
+clean:
+ rm -f *.dtbo *.dts.tmp *~
+
+%.dtbo: %.dts
+ cpp -nostdinc -undef -D__DTS__ -I$(INCLUDE_PATH) -x assembler-with-cpp -o $<.tmp $<
+ dtc -Wno-unit_address_vs_reg -O dtb -o $@ -b 0 -@ $<.tmp
--- /dev/null
+Simple devicetree definition for a gpio keypad for connected to a BeagleBone
+Black and using the gpio-keys driver.
+
+The keypad is connected this way:
+
+ P8_07 -> KEY_TOP
+ P8_08 -> KEY_LEFT
+ P8_09 -> KEY_RIGHT
+ P8_10 -> KEY_BOTTOM
+
+The .dts file depends on definitions from bb.org-overlays, to download it
+execute the following commands:
+
+ $ cd ~
+ $ git clone https://github.com/beagleboard/bb.org-overlays.git
+
+To compile and install the devicetree overlay execute the following commands:
+
+ $ make && sudo make install
+
+And add an entry with the DT overlay to /boot/uEnv.txt, for example:
+
+ uboot_overlay_addr1=/lib/firmware/bbb-gpio-keypad-00A0.dtbo
+
+
+Copyright (C) 2018 Antonio Ospite <ao2@ao2.it>
--- /dev/null
+/dts-v1/;
+/plugin/;
+
+#include <dt-bindings/board/am335x-bbw-bbb-base.h>
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/pinctrl/am33xx.h>
+
+/ {
+ compatible = "ti,beaglebone", "ti,beaglebone-black";
+
+ /* identification */
+ part-number = "gpio-keypad-ao2";
+ version = "00A0";
+
+ // resources this cape uses
+ exclusive-use =
+ "P8.07",
+ "P8.08",
+ "P8.09",
+ "P8.10";
+
+ fragment@0 {
+ target = <&am33xx_pinmux>;
+ __overlay__ {
+ keypad_pins: pinmux_gpio_pins{
+ pinctrl-single,pins = <
+ BONE_P8_07 (PIN_INPUT_PULLUP | MUX_MODE7)
+ BONE_P8_08 (PIN_INPUT_PULLUP | MUX_MODE7)
+ BONE_P8_09 (PIN_INPUT_PULLUP | MUX_MODE7)
+ BONE_P8_10 (PIN_INPUT_PULLUP | MUX_MODE7)
+ >;
+ };
+ };
+ };
+
+ fragment@1 {
+ target-path = "/";
+ __overlay__ {
+ gpio_keys {
+ compatible = "gpio-keys";
+ pinctrl-names = "default";
+ pinctrl-0 = <&keypad_pins>;
+
+ up {
+ label = "GPIO Key UP";
+ linux,code = <103>;
+ gpios = <&gpio2 2 GPIO_ACTIVE_LOW>;
+ debounce_interval = <50>;
+ };
+ left {
+ label = "GPIO Key LEFT";
+ linux,code = <105>;
+ gpios = <&gpio2 3 GPIO_ACTIVE_LOW>;
+ debounce_interval = <50>;
+ };
+ right {
+ label = "GPIO Key RIGHT";
+ linux,code = <106>;
+ gpios = <&gpio2 5 GPIO_ACTIVE_LOW>;
+ debounce_interval = <50>;
+ };
+ down {
+ label = "GPIO Key DOWN";
+ linux,code = <108>;
+ gpios = <&gpio2 4 GPIO_ACTIVE_LOW>;
+ debounce_interval = <50>;
+ };
+ };
+ };
+ };
+};
+