From 2a660ac695ffe3a2619b38e7885e398f8c6924b2 Mon Sep 17 00:00:00 2001 From: "Igor Zalatov (from Citadel PC)" Date: Mon, 5 Sep 2022 20:57:27 +0300 Subject: [PATCH] Add ingenic-opensdk package --- .../hisilicon-opensdk/hisilicon-opensdk.mk | 2 +- general/package/ingenic-opensdk/Config.in | 10 +++ .../ingenic-opensdk/ingenic-opensdk.mk | 23 ++++++ .../ingenic-opensdk/src/kernel/Makefile | 20 +++++ .../package/ingenic-opensdk/src/kernel/gpio.c | 78 ++++++++++++++++++ .../ingenic-osdrv-t31/files/kmod/gpio.ko | Bin 0 -> 4624 bytes 6 files changed, 132 insertions(+), 1 deletion(-) create mode 100644 general/package/ingenic-opensdk/Config.in create mode 100644 general/package/ingenic-opensdk/ingenic-opensdk.mk create mode 100644 general/package/ingenic-opensdk/src/kernel/Makefile create mode 100644 general/package/ingenic-opensdk/src/kernel/gpio.c create mode 100644 general/package/ingenic-osdrv-t31/files/kmod/gpio.ko diff --git a/general/package/hisilicon-opensdk/hisilicon-opensdk.mk b/general/package/hisilicon-opensdk/hisilicon-opensdk.mk index 20e41e9a..ff9ae126 100644 --- a/general/package/hisilicon-opensdk/hisilicon-opensdk.mk +++ b/general/package/hisilicon-opensdk/hisilicon-opensdk.mk @@ -1,6 +1,6 @@ ################################################################################ # -# openhisilicon +# hisilicon-opensdk # ################################################################################ diff --git a/general/package/ingenic-opensdk/Config.in b/general/package/ingenic-opensdk/Config.in new file mode 100644 index 00000000..99ee6d5b --- /dev/null +++ b/general/package/ingenic-opensdk/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_INGENIC_OPENSDK + bool "ingenic-opensdk" + default n + depends on BR2_LINUX_KERNEL + help + Opensource Ingenic SoCs SDK + +comment "INGENIC_OPENSDK needs a Linux kernel to be built" + depends on !BR2_LINUX_KERNEL + diff --git a/general/package/ingenic-opensdk/ingenic-opensdk.mk b/general/package/ingenic-opensdk/ingenic-opensdk.mk new file mode 100644 index 00000000..5b48a03b --- /dev/null +++ b/general/package/ingenic-opensdk/ingenic-opensdk.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# ingenic-opensdk +# +################################################################################ + +INGENIC_OPENSDK_LICENSE = GPL-3.0 +INGENIC_OPENSDK_LICENSE_FILES = LICENSE + +FAMILY = $(shell grep "/board/" $(BR2_CONFIG) | head -1 | cut -d "/" -f 3) + + +define INGENIC_OPENSDK_EXTRACT_CMDS + cp $(BR2_EXTERNAL_INGENIC_PATH)/package/ingenic-opensdk/src/kernel/* $(@D)/ +endef + +INGENIC_OPENSDK_MODULE_MAKE_OPTS = \ + >CONFIG_GPIO=m \ + KVER=$(LINUX_VERSION_PROBED) \ + KSRC=$(LINUX_DIR) + +$(eval $(kernel-module)) +$(eval $(generic-package)) diff --git a/general/package/ingenic-opensdk/src/kernel/Makefile b/general/package/ingenic-opensdk/src/kernel/Makefile new file mode 100644 index 00000000..eb47386a --- /dev/null +++ b/general/package/ingenic-opensdk/src/kernel/Makefile @@ -0,0 +1,20 @@ +CROSS_COMPILE ?= mips-linux-gnu- + +ifeq (${ISVP_ENV_KERNEL_DIR}, ) + ISVP_ENV_KERNEL_DIR = ../../../kernel +endif + +KDIR := ${ISVP_ENV_KERNEL_DIR} +MODULE_NAME := gpio + +all: modules + +.PHONY: modules clean + +obj-m := $(MODULE_NAME).o + +modules: + @$(MAKE) -C $(KDIR) M=$(shell pwd) $@ +clean: + @rm -rf *.o *~ .depend .*.cmd *.mod.c .tmp_versions *.ko *.symvers modules.order + @rm -f gpio diff --git a/general/package/ingenic-opensdk/src/kernel/gpio.c b/general/package/ingenic-opensdk/src/kernel/gpio.c new file mode 100644 index 00000000..cb7c7066 --- /dev/null +++ b/general/package/ingenic-opensdk/src/kernel/gpio.c @@ -0,0 +1,78 @@ +#include +#include +#include +#include +#include +#include + + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("OpenIPC"); +MODULE_DESCRIPTION("Ingenic GPIO Claimer"); + +static struct proc_dir_entry *claim_proc; + +int claim_gpio(int gpio) { + int ret = 0; + + pr_debug("GPIO[%i] Requesting...\n", gpio); + + if (!gpio_is_valid(gpio)) { + pr_err("GPIO[%i] is not valid\n", gpio); + return -1; + } + + if (gpio_request(gpio, 0) < 0) + return -1; + + pr_debug("GPIO[%i] Setting direction...\n", gpio); + gpio_direction_output(gpio, 0); + pr_debug("GPIO[%i] Exporting...\n", gpio); + gpio_export(gpio, true); + + return 0; +} + +ssize_t claim_proc_write(struct file *filp, const char *buf, size_t len, + loff_t *off) { + int ret = 0; + char cmd[4] = {0}; + uint32_t addr, data, datalen; + + if (len > 4) { + return -EFAULT; + } + if (copy_from_user(cmd, buf, len)) { + return -EFAULT; + } + int gpio = simple_strtoul(cmd, NULL, 0); + ret = claim_gpio(gpio); + if (ret) { + pr_err("GPIO[%i] Error %i \n", gpio, ret); + return -EFAULT; + } else { + pr_debug("GPIO[%i] Claiming...\n", gpio); + } + + return len; +} + +static const struct file_operations claim_proc_fops = { + .owner = THIS_MODULE, + .write = claim_proc_write, +}; + +static __init int init_claim(void) { + claim_proc = proc_mkdir("jz/claim", 0); + if (!claim_proc) { + printk("err: jz_proc_mkdir failed\n"); + } + proc_create_data("gpio", S_IRUGO, claim_proc, &claim_proc_fops, NULL); + printk("Ingenic GPIO claim module (c) OpenIPC.org\n"); + return 0; +} + +static __exit void exit_claim(void) { proc_remove(claim_proc); } + +module_init(init_claim); +module_exit(exit_claim); diff --git a/general/package/ingenic-osdrv-t31/files/kmod/gpio.ko b/general/package/ingenic-osdrv-t31/files/kmod/gpio.ko new file mode 100644 index 0000000000000000000000000000000000000000..2947e65021e24a50fc0bcb758104250b2f4e52fc GIT binary patch literal 4624 zcmeHJU5p!76+X7tZg$fUciFJNGXcCRn>=7s!$%FDiTr(qJ3zovO@5H#6yL6KmwsWR00Vh1S(PljGZ#*+JdjGIL{m!k$PhvM0g+T*R?DHmtlTLdmNCdv z7#WPEhtA5*qZjUbw!eSp2QR$(-1Flb?l13q_@2-lk3aX{JSeGe9nQ-u*QVt9wQ;FT znZ2HvvpvkFPl$|R++P^KSpmLSm=wwP`njcG`lwkgSCO>7UH zIn5leZzJxunO{RyH!{=m=E2_~pRD}+Z~?g(^5bg+y zZT5Dg0C_)izH}8anQQulSrqwIA|CV3%l8kOvqldy%YiMKOcbISK!-!L763m$v& zXsuawT3oAq|6b#K@?B)5%9m<4*mV7cI9q8tHP!B@g{9RM zsVkIF?<~l9<+rL0r?xO}m5NrWY}-!fyk~bFueR-yRkUrx^Ob6O0qeKB?WS9;8=qTV z{rvo#{Yc4}pSyqgjPc&u^*+9L=Kq@iyaTD;zxw^Yw!u{=AI12%R!C;oJg>|5H$QMR z5C-d)78ma|X7y3>=dF3Gc%)IQ9V-`&xnk+KRV*JVl@1xltg?lB^8J~AWGoUncp{p(JT{` zLFY(PMs7<&_(!)(PzIeMNg26431R=CT@{bX-}}0PE3izX-Veqr#=ujE_pul^L%dh4 z7&B5D`=J~4OgO(!9s#G!%u}*YHo);3(SIZSb?_lgNDtt^KrtcTfm}}D??PTl;BClX zOyK7s2MPQFL5Q_Sym$fqzKz#x7LoK!)BxD8eOF@oXFPNLqw z#+VH4NZySx_iqvrCgR5OY>3lxdyHvD`jz;9HrltUu?O02H}JYaa$_F%oj{4_JMG{c zm~QvTq~>~0*xe4AWT^I4%RR4Hh||~%>`qfDPdZM^Ybv`F_<`GPM$vrrwXW&};dhb! zqzHbTBnNJQXYUX>ObmXUxD=h|9QZ2nq3HX_f!B#~dGp)Nfxkt3ROAoD;J+rmGdg=Y z@OOxhh}`5n_#T{*;JjP1NS5Ds4t$Il zAgl)*D#_j&-48i%q!{`;L3{cmM&o#p7<`2sc43`xzD5kr`ygwIY!ZW?A;!h!5rgx7 z$fCJDMGPM1fr|`FB^O_4%p*?>PDSDMKaqke-N^A&RRnl*Ad zw>nR>g6cXrUTerVwS+%RWuZe^>s_Z=KjPHI^6^(0sI4H9_#q}BzqkQxIPDErEdCi; z)pcj1S#5N%%H>&RtddoZoJ1buw}^cR)!w9ZKOF2Z1bSgu0ifm z5fk4LiLZ^_wt_+W@?Mc0@M#Rjpg+D}o~5L}8vs|J)1>1bha&0k0L}sJ=#Mtq-)A8w z{cR!G6m*)jza=P={(cI726Xh7!_fY|5MfX6%Vh|((L_698v{peVE6Kf9c!gs8-w|A zA4xl~dpQ!rC;f5$n=#jMJ)B>DFPii|e*=nS9lwpg6UM@p59)XtGW}|QH{kCwuqM4P z&p|;uOo!y@i5Tm+F9MI+Rj7zbFS`Pq%X3BY>p+Px zLc3mM5Subd-zn9PPe3V#oR4WBjw?@EfrV%