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 00000000..2947e650 Binary files /dev/null and b/general/package/ingenic-osdrv-t31/files/kmod/gpio.ko differ