move chardev private data from h to unipi_spi.c
authorMiroslav Ondra <ondra@faster.cz>
Wed, 5 Sep 2018 09:08:37 +0000 (11:08 +0200)
committerMiroslav Ondra <ondra@faster.cz>
Wed, 5 Sep 2018 09:08:37 +0000 (11:08 +0200)
remove duplicate structure in neuronspi_file_data (global neuronspi_s_dev)

modules/unipi/src/unipi_common.h
modules/unipi/src/unipi_spi.c
modules/unipi/src/unipi_spi.h

index 0cfd3d4b3f0e9024ce5a9f1d18b40c747009d5bb..be2902f7e37e0fbfa6c8f448d37e76f09ba83b1f 100644 (file)
@@ -263,6 +263,7 @@ struct neuronspi_led_driver
        spinlock_t                      lock;
 };
 
+/*
 struct neuronspi_file_data
 {
        struct spi_device** spi_device;
@@ -273,6 +274,7 @@ struct neuronspi_file_data
        u8                                      device_index;
        u8                                      has_first_message;
 };
+*/
 
 struct neuronspi_direct_acc
 {
@@ -284,9 +286,6 @@ struct neuronspi_direct_acc
  * Data Declarations *
  *********************/
 
-extern struct mutex neuronspi_master_mutex;
-extern struct neuronspi_char_driver neuronspi_cdrv;
-extern struct spinlock* neuronspi_spi_w_spinlock;
 extern struct spi_device* neuronspi_s_dev[NEURONSPI_MAX_DEVS];
 extern struct task_struct *neuronspi_invalidate_thread;
 
index 887265bb6c43b869032e9aef8077f86387b787e3..4eded518530f03f0064961c2818eabb8afece8bb 100644 (file)
  * Data Definitions *
  ********************/
 
-MODULE_DEVICE_TABLE(of, neuronspi_id_match);
-
-struct spi_driver neuronspi_spi_driver =
-{
-       .driver =
-       {
-               .name                   = NEURON_DRIVER_NAME,
-               .of_match_table = of_match_ptr(neuronspi_id_match)
-       },
-       .probe                          = neuronspi_spi_probe,
-       .remove                         = neuronspi_spi_remove,
-};
-
-struct file_operations file_ops =
-{
-       .open                           = neuronspi_open,
-       .read                           = neuronspi_read,
-       .write                          = neuronspi_write,
-       .release                        = neuronspi_release,
-       .owner                          = THIS_MODULE
-};
-
-struct neuronspi_char_driver neuronspi_cdrv =
-{
-       .dev = NULL
-};
-
 struct mutex neuronspi_master_mutex;
 struct mutex unipi_inv_speed_mutex;
 int neuronspi_model_id = -1;
@@ -84,6 +57,22 @@ static u8 neuronspi_probe_count = 0;
 static struct spinlock *neuronspi_probe_spinlock;
 static struct sched_param neuronspi_sched_param = { .sched_priority = MAX_RT_PRIO / 2 };
 
+struct neuronspi_char_driver neuronspi_cdrv =
+{
+       .dev = NULL
+};
+
+struct neuronspi_file_data
+{
+       //struct spi_device** spi_device;
+       struct mutex            lock;
+    struct neuronspi_op_buffer send_buf;
+    struct neuronspi_op_buffer recv_buf;
+       u32                             message_len;
+       u8                                      device_index;
+       u8                                      has_first_message;
+};
+
 /************************
  * Non-static Functions *
  ************************/
@@ -301,7 +290,7 @@ int neuronspi_open (struct inode *inode_p, struct file *file_p)
        f_internal_data = kzalloc(sizeof(*f_internal_data), GFP_ATOMIC);
        f_internal_data->recv_buf.second_message = kzalloc(NEURONSPI_BUFFER_MAX, GFP_ATOMIC);
        f_internal_data->send_buf.second_message = kzalloc(NEURONSPI_BUFFER_MAX, GFP_ATOMIC);
-       f_internal_data->spi_device = neuronspi_s_dev;
+       //f_internal_data->spi_device = neuronspi_s_dev;
        mutex_init(&f_internal_data->lock);
        file_p->private_data = f_internal_data;
        return 0;
@@ -314,7 +303,7 @@ int neuronspi_release (struct inode *inode_p, struct file *file_p)
                return -1;
        }
        f_internal_data = (struct neuronspi_file_data*)file_p->private_data;
-       f_internal_data->spi_device = NULL;
+       //f_internal_data->spi_device = NULL;
        kfree(f_internal_data->recv_buf.second_message);
        f_internal_data->recv_buf.second_message = NULL;
        kfree(f_internal_data->send_buf.second_message);
@@ -331,7 +320,7 @@ ssize_t neuronspi_read (struct file *file_p, char *buffer, size_t len, loff_t *o
        s32 result = 0;
     loff_t dummy_offset = 0;
        struct neuronspi_file_data* private_data;
-       struct spi_device* spi_driver_data;
+       struct spi_device* spi;
        struct neuronspi_driver_data* driver_data;
        // Sanity checking
        if (neuronspi_cdrv.open_counter == 0) {
@@ -350,10 +339,10 @@ ssize_t neuronspi_read (struct file *file_p, char *buffer, size_t len, loff_t *o
     }
     private_data = (struct neuronspi_file_data*) file_p->private_data;
     if (private_data == NULL) return -4;
-    spi_driver_data = private_data->spi_device[private_data->device_index];    // Get private (driver) data from FP
-    if (spi_driver_data == NULL) return -2;
+    spi = neuronspi_s_dev[private_data->device_index];
+    if (spi == NULL) return -2;
 
-    driver_data = spi_get_drvdata(spi_driver_data);
+    driver_data = spi_get_drvdata(spi);
     if (driver_data == NULL) return -2;
     //if (driver_data->spi_driver == NULL) return -2;  // Invalid private data
     //if ((driver_data->first_probe_reply[0] == 0) && !(driver_data->probe_always_succeeds) ) return -3; // couldnt happen
@@ -363,8 +352,8 @@ ssize_t neuronspi_read (struct file *file_p, char *buffer, size_t len, loff_t *o
        mutex_unlock(&(private_data->lock));
        return -10;
     }
-    unipi_spi_trace(KERN_INFO "UNIPISPI: CDEV Read %d, DEV:%s%d DRV:%d msglen=%d offset=%d\n", len, (spi_driver_data->dev.of_node->name),
-               (spi_driver_data->chip_select), (private_data->device_index),private_data->message_len, (int)*offset);
+    unipi_spi_trace(KERN_INFO "UNIPISPI: CDEV Read %d, nspi:%d msglen=%d offset=%d\n", len,
+                    (private_data->device_index), private_data->message_len, (int)*offset);
             
        if (private_data->has_first_message & UNIPISPI_OP_MODE_SEND_HEADER) {
                result = simple_read_from_buffer(buffer, len, &dummy_offset, private_data->recv_buf.first_message, NEURONSPI_FIRST_MESSAGE_LENGTH);
@@ -400,7 +389,7 @@ ssize_t neuronspi_write (struct file *file_p, const char *buffer, size_t len, lo
     size_t datalen;
        //unsigned long flags;
        struct neuronspi_file_data* private_data;
-       struct spi_device* spi_driver_data;
+       struct spi_device* spi;
        struct neuronspi_driver_data* driver_data;
        // Sanity checking
        if (neuronspi_cdrv.open_counter == 0) {
@@ -432,10 +421,10 @@ ssize_t neuronspi_write (struct file *file_p, const char *buffer, size_t len, lo
     
     if (device_index > NEURONSPI_MAX_DEVS - 1) return -2;
     private_data = (struct neuronspi_file_data*) file_p->private_data;
-    spi_driver_data = private_data->spi_device[device_index];  // Get private (driver) data from FP
-    if (spi_driver_data == NULL) return -2;
+    spi = neuronspi_s_dev[device_index];       
+    if (spi == NULL) return -2;
 
-    driver_data = spi_get_drvdata(spi_driver_data);
+    driver_data = spi_get_drvdata(spi);
     if (driver_data == NULL) return -2;
     //if (driver_data->spi_driver == NULL) return -2;  // Invalid private data
     //if ((driver_data->first_probe_reply[0] == 0) && !(driver_data->probe_always_succeeds) ) 
@@ -488,7 +477,7 @@ ssize_t neuronspi_write (struct file *file_p, const char *buffer, size_t len, lo
             return len;
         }
     }
-    neuronspi_spi_send_op(spi_driver_data, &private_data->send_buf, &private_data->recv_buf, private_data->message_len,
+    neuronspi_spi_send_op(spi, &private_data->send_buf, &private_data->recv_buf, private_data->message_len,
                                                                frequency, delay, send_header, reservation);
     mutex_unlock(&private_data->lock);
     return len;
@@ -829,8 +818,8 @@ void neuronspi_enable_uart_interrupt(struct neuronspi_port* n_port)
     if (n_spi->no_irq) {
         // start polling
         n_spi->poll_enabled = 1;
+        // invoke first probe -> which invokes hrtimer
         kthread_queue_work(&n_spi->primary_worker, &n_spi->irq_work);
-        //hrtimer_start_range_ns(&n_spi->poll_timer, 2000000, 4000000, HRTIMER_MODE_REL);
     }
 }
 
@@ -852,7 +841,7 @@ s32 neuronspi_spi_probe(struct spi_device *spi)
        spin_unlock_irqrestore(neuronspi_probe_spinlock, flags);
        if (!n_spi)
                return -ENOMEM;
-       unipi_spi_trace(KERN_INFO "UNIPISPI: Probe Started\n");
+       unipi_spi_trace(KERN_INFO "UNIPISPI: CS%d Probe Started\n", spi->chip_select);
        if (spi == NULL) {
         kfree(n_spi);
                return -8;
@@ -1137,6 +1126,17 @@ s32 neuronspi_spi_remove(struct spi_device *spi)
        return 0;
 }
 
+
+struct file_operations file_ops =
+{
+       .open                           = neuronspi_open,
+       .read                           = neuronspi_read,
+       .write                          = neuronspi_write,
+       .release                        = neuronspi_release,
+       .owner                          = THIS_MODULE
+};
+
+
 s32 char_register_driver(void)
 {
        s32 ret = 0;
@@ -1186,6 +1186,19 @@ s32 char_unregister_driver(void)
 /*********************
  * Final definitions *
  *********************/
+MODULE_DEVICE_TABLE(of, neuronspi_id_match);
+
+struct spi_driver neuronspi_spi_driver =
+{
+       .driver =
+       {
+               .name                   = NEURON_DRIVER_NAME,
+               .of_match_table = of_match_ptr(neuronspi_id_match)
+       },
+       .probe                          = neuronspi_spi_probe,
+       .remove                         = neuronspi_spi_remove,
+};
+
 
 MODULE_ALIAS("spi:unipispi");
 
@@ -1206,11 +1219,7 @@ static s32 __init neuronspi_init(void)
                printk(KERN_ERR "UNIPISPI: Failed to init neuronspi spi --> %d\n", ret);
                return ret;
        } else {
-#ifdef NEURONSPI_MAJOR_VERSIONSTRING
                printk(KERN_INFO "UNIPISPI: SPI Driver Registered, Major Version: %s\n", NEURONSPI_MAJOR_VERSIONSTRING);
-#else
-               printk(KERN_INFO "UNIPISPI: SPI Driver Registered\n");
-#endif
        }
 
        neuronspi_invalidate_thread = kthread_create(neuronspi_regmap_invalidate, NULL, "unipispi_inv");
index 5f293c5dcf50de1f5a49335e20c6ca8fb2ddf760..2ed625d607c3d3f9261a4ffe53b642e0163d8840 100644 (file)
@@ -116,22 +116,6 @@ static const struct of_device_id neuronspi_id_match[] = {
  * Function Declarations *
  *************************/
 
-int neuronspi_open (struct inode *, struct file *);
-int neuronspi_release (struct inode *, struct file *);
-ssize_t neuronspi_read (struct file *, char *, size_t, loff_t *);
-ssize_t neuronspi_write (struct file *, const char *, size_t, loff_t *);
-s32 char_register_driver(void);
-s32 char_unregister_driver(void);
-irqreturn_t neuronspi_spi_irq(s32 irq, void *dev_id);
-s32 neuronspi_spi_probe(struct spi_device *spi);
-s32 neuronspi_spi_remove(struct spi_device *spi);
-
-int neuronspi_spi_send_const_op(struct spi_device* spi_dev, const struct neuronspi_op_buffer* send_buf,
-                            struct neuronspi_op_buffer* recv_buf, s32 len, 
-                            s32 freq, s32 delay);
-int neuronspi_spi_send_op(struct spi_device* spi_dev, struct neuronspi_op_buffer* send_buf, 
-                            struct neuronspi_op_buffer* recv_buf, s32 len, 
-                            s32 freq, s32 delay, s32 send_header, u8 lock_val);
 s32 neuronspi_spi_uart_write(struct spi_device *spi, u8 *send_buf, int length, u8 uart_index);
 void neuronspi_spi_uart_read(struct spi_device* spi_dev, u8 *recv_buf, s32 len, u8 uart_index);
 int unipispi_modbus_read_register(struct spi_device* spi_dev, u16 reg, u16* value);
@@ -142,13 +126,6 @@ int unipispi_modbus_write_u32(struct spi_device* spi_dev, u16 reg, u32 value);
 int unipispi_modbus_write_many(struct spi_device* spi_dev, u16 reg, u16* value, int register_count);
 int unipispi_modbus_write_coil(struct spi_device* spi_dev, u16 coil, int value);
 
-/*void neuronspi_spi_set_irqs(struct spi_device* spi_dev, u16 to);
-
-int neuronspi_spi_gpio_do_set(struct spi_device* spi_dev, u32 id, int value);
-int neuronspi_spi_gpio_ro_set(struct spi_device* spi_dev, u32 id, int value);
-int neuronspi_spi_gpio_di_get(struct spi_device* spi_dev, u32 id);
-int neuronspi_spi_gpio_di_get(struct spi_device* spi_dev, u32 id);
-*/
 void neuronspi_enable_uart_interrupt(struct neuronspi_port* n_port);
 
 
@@ -158,7 +135,6 @@ void neuronspi_enable_uart_interrupt(struct neuronspi_port* n_port);
 
 // Host driver struct
 extern struct spi_driver neuronspi_spi_driver;
-extern struct file_operations file_ops;
 
 extern struct mutex unipi_inv_speed_mutex;