From 071106ecf68c401173c58808b1cf5f68cc50d390 Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Fri, 05 Jan 2024 08:39:27 +0000 Subject: [PATCH] change wifi driver to cypress --- kernel/drivers/misc/nkio/nk_io_core.c | 126 +++++++++++++++++++++++++++++++++-------- 1 files changed, 101 insertions(+), 25 deletions(-) diff --git a/kernel/drivers/misc/nkio/nk_io_core.c b/kernel/drivers/misc/nkio/nk_io_core.c index 1e06855..c2f4ae1 100755 --- a/kernel/drivers/misc/nkio/nk_io_core.c +++ b/kernel/drivers/misc/nkio/nk_io_core.c @@ -12,15 +12,19 @@ #include <asm/uaccess.h> #include <linux/string.h> #include <linux/uaccess.h> +#include <linux/device.h> +#include <linux/proc_fs.h> #define GPIO_FUNCTION_OUTPUT 0 #define GPIO_FUNCTION_INPUT 1 #define GPIO_FUNCTION_RESET 3 - -static int flash_flag = 0; +#define HIGH "1" +#define LOW "0" + +//static int flash_flag = 0; struct ndj_gpio { - int gpio_num; //gpui num + int gpio_num; //gpio num int action; //gpio flag int gpio_event; //input only int send_mode; //input only @@ -31,13 +35,67 @@ struct ndj_gpio_data { struct ndj_gpio ndj_gpio_num[20]; - struct input_dev *input; struct timer_list mytimer; int gpio_dts_num; + unsigned int gpio_op0; + unsigned int gpio_op1; }; - + static struct ndj_gpio_data *gpio_data = NULL; -static int event_flag = 0; + +/* creat sysfs gpio api node*/ +#if 0 +static ssize_t gpio_op0_show(struct class *class,struct class_attribute *attr, char *buf) +{ + return sprintf(buf, "%d\n", gpio_get_value(gpio_data->gpio_op0)); +} + +static ssize_t gpio_op0_store(struct class *class,struct class_attribute *attr, const char *buf, size_t size) +{ + if(!strncmp(buf, HIGH, strlen(HIGH))) { + gpio_set_value(gpio_data->gpio_op0, 1); + + } else if(!strncmp(buf, LOW, strlen(LOW))) { + gpio_set_value(gpio_data->gpio_op0, 0); + } + return size; +} + +static ssize_t gpio_op1_show(struct class *class,struct class_attribute *attr, char *buf) +{ + return sprintf(buf, "%d\n", gpio_get_value(gpio_data->gpio_op1)); +} + +static ssize_t gpio_op1_store(struct class *class,struct class_attribute *attr, const char *buf, size_t size) +{ + if(!strncmp(buf, HIGH, strlen(HIGH))) { + gpio_set_value(gpio_data->gpio_op1, 1); + + } else if(!strncmp(buf, LOW, strlen(LOW))) { + gpio_set_value(gpio_data->gpio_op1, 0); + } + return size; +} + +static CLASS_ATTR_RW(gpio_op0); +static CLASS_ATTR_RW(gpio_op1); + +static struct attribute *ndj_gpio_attrs[] = { + &class_attr_gpio_op0.attr, + &class_attr_gpio_op1.attr, + NULL, +}; + +ATTRIBUTE_GROUPS(ndj_gpio); + +/** Device model classes */ +struct class ndj_io_class = { + .name = "io_control", //sysfs directory + .class_groups = ndj_gpio_groups, +}; + +#endif +//static int event_flag = 0; static int open_now = 0; static char* file_name = NULL; @@ -95,28 +153,21 @@ } -static const struct file_operations gpio_ops = { - .owner = THIS_MODULE, - .open = gpio_open, - .write = gpio_write, - .read = gpio_read, +static const struct proc_ops gpio_ops = { + .proc_open = gpio_open, + .proc_write = gpio_write, + .proc_read = gpio_read, }; static int ndj_gpio_probe(struct platform_device *pdev) { struct device_node *np = pdev->dev.of_node; struct device_node *child_np; - struct device *dev = &pdev->dev; static struct proc_dir_entry *root_entry_gpio; enum of_gpio_flags gpio_flags; int ret = 0; int gpio_cnt = 0; char gpio_name_num[20]; int gpio_in_cnt = 0; - int cnt =0; - int lvds_index = 0; - int gpio0, gpio1, gpio2, gpio3; - int i=0; - enum of_gpio_flags flags; gpio_data = devm_kzalloc(&pdev->dev, sizeof(struct ndj_gpio_data),GFP_KERNEL); if (!gpio_data) { @@ -130,6 +181,23 @@ if (gpio_data->gpio_dts_num == 0){ dev_info(&pdev->dev, "no gpio defined\n"); } + + #if 0 + /*gpio_op0*/ + ret = of_get_named_gpio_flags(np, "gpio_op0", 0, &gpio_flags); + if (ret < 0) { + printk("%s() Can not read property gpio_op0\n", __func__); + return -ENODEV; + } + gpio_data->gpio_op0 = ret; + ret = gpio_request(gpio_data->gpio_op0, "gpio_op0"); + if(ret < 0){ + printk("%s() gpio_op0 request ERROR\n", __func__); + return -ENODEV; + } + + gpio_direction_output(gpio_data->gpio_op0,!gpio_flags); +#endif /* create node */ root_entry_gpio = proc_mkdir("ndj_gpio", NULL); @@ -161,9 +229,9 @@ gpio_direction_input(gpio_data->ndj_gpio_num[gpio_cnt].gpio_num); //gpio_direction_output(gpio_data->ndj_gpio_num[gpio_cnt].gpio_num,!gpio_data->ndj_gpio_num[gpio_cnt].action); - event_flag = gpio_flags; - of_property_read_u32(child_np, "send_mode", &(gpio_data->ndj_gpio_num[gpio_cnt].send_mode)); - of_property_read_u32(child_np, "gpio_event", &(gpio_data->ndj_gpio_num[gpio_cnt].gpio_event)); + //event_flag = gpio_flags; + //of_property_read_u32(child_np, "send_mode", &(gpio_data->ndj_gpio_num[gpio_cnt].send_mode)); + //of_property_read_u32(child_np, "gpio_event", &(gpio_data->ndj_gpio_num[gpio_cnt].gpio_event)); gpio_in_cnt++; } break; @@ -200,22 +268,29 @@ gpio_cnt++; } - platform_set_drvdata(pdev, gpio_data); + platform_set_drvdata(pdev, gpio_data); + +#if 0 + ret= class_register(&ndj_io_class); + if(ret < 0) { + return -EINVAL; + } +#endif return 0; } static int ndj_gpio_suspend(struct platform_device *pdev, pm_message_t state) { - int ret; - struct nk_io_pdata *pdata; +// int ret; +// struct nk_io_pdata *pdata; printk("nk_suspend !!!!\n"); return 0; } static int ndj_gpio_resume(struct platform_device *pdev) { - int ret,reset_pin; +// int ret,reset_pin; printk("nk_io resume !!!!\n"); return 0; } @@ -223,6 +298,7 @@ static int ndj_gpio_remove(struct platform_device *pdev) { +// class_unregister(&ndj_io_class); return 0; } @@ -245,4 +321,4 @@ module_platform_driver(ndj_gpio_driver); MODULE_LICENSE("GPL"); -MODULE_LICENSE("GPL"); \ No newline at end of file +MODULE_LICENSE("GPL"); -- Gitblit v1.6.2