Browse Source

modify driver struct

宋超 2 years ago
parent
commit
d7f3e00cc2
3 changed files with 11 additions and 13 deletions
  1. 10 2
      include/rtdef.h
  2. 0 10
      src/device.c
  3. 1 1
      src/driver.c

+ 10 - 2
include/rtdef.h

@@ -1102,7 +1102,7 @@ struct rt_device
 {
     struct rt_object          parent;                   /**< inherit from rt_object */
 #ifdef RT_USING_DM    
-    const struct rt_driver    *drv;
+    struct rt_driver    *drv;
     void *dtb_node; 
 #endif    
     enum rt_device_class_type type;                     /**< device type */
@@ -1147,11 +1147,18 @@ struct rt_driver
 {
 #ifdef RT_USING_DEVICE_OPS    
     const struct rt_device_ops *dev_ops;
+#else
+    /* common device interface */
+    rt_err_t  (*init)   (rt_device_t dev);
+    rt_err_t  (*open)   (rt_device_t dev, rt_uint16_t oflag);
+    rt_err_t  (*close)  (rt_device_t dev);
+    rt_size_t (*read)   (rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t size);
+    rt_size_t (*write)  (rt_device_t dev, rt_off_t pos, const void *buffer, rt_size_t size);
+    rt_err_t  (*control)(rt_device_t dev, int cmd, void *args);    
 #endif
     const struct filesystem_ops *fops;
     const char *name;
     enum rt_device_class_type dev_type;
-    int device_priv_data_size;
     int device_size;
     int flag;
     const struct rt_device_id *dev_match;
@@ -1159,6 +1166,7 @@ struct rt_driver
     int (*probe_init)(struct rt_device *dev);
     int (*remove)(struct rt_device *dev);
     const void *ops;    /* driver-specific operations */
+    void *drvpriv_data;
 };
 typedef struct rt_driver *rt_driver_t;
 

+ 0 - 10
src/device.c

@@ -525,16 +525,6 @@ rt_device_t rt_device_create_since_driver(rt_driver_t drv,int device_id)
     {
         return RT_NULL;
     }
-    if(drv->device_priv_data_size != 0)
-    {
-        device->user_data = (void *)(rt_calloc(1,drv->device_priv_data_size));
-        if(device->user_data == RT_NULL)
-        {
-            rt_free(device);
-            return RT_NULL;
-        }   
-    }
-
     device->device_id = device_id;
     rt_snprintf(device->parent.name, sizeof(device->parent.name), "%s%d", drv->name, device_id);
     return device;

+ 1 - 1
src/driver.c

@@ -64,7 +64,7 @@ rt_err_t rt_driver_match_with_dtb(const rt_driver_t drv,void *from_node,int max_
     rt_device_t device;
     int ret,i;
     int total_dev_num = 0;
-    if ((!drv)||(!drv->dev_match)||(!drv->dev_match->compatible)||(!from_node)||(!drv->device_size)||(!drv->device_priv_data_size))
+    if ((!drv)||(!drv->dev_match)||(!drv->dev_match->compatible)||(!from_node)||(!drv->device_size))
     {
         return -RT_EINVAL;
     }