t224.c 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #include <linux/kernel.h>
  2. #include <linux/module.h>
  3. #include <linux/miscdevice.h>
  4. #include <linux/fs.h>
  5. #include <linux/types.h>
  6. #include <linux/moduleparam.h>
  7. #include <linux/slab.h>
  8. #include <linux/cdev.h>
  9. #include <linux/gpio.h>
  10. #include <linux/of_gpio.h>
  11. #include <asm/uaccess.h>
  12. #include "ds18b20.h"
  13. #define DEVICE_NAME "ds18b20-224"
  14. #define NODE_NAME "ds18b20-224"
  15. #define gpio_num 224
  16. static int ds18b20_open(struct inode *inode, struct file *filp)
  17. {
  18. //printk (KERN_INFO "Device opened\n");
  19. int flag = initDs18b20(gpio_num);
  20. if(flag & 0x01)
  21. return -1;
  22. return 0;
  23. }
  24. /*读取数据*/
  25. static int ds18b20_read(struct file *filp, char __user *buffer, size_t count, loff_t *ppos)
  26. {
  27. unsigned char tmp[2];
  28. readDs18b20Data(tmp);
  29. return copy_to_user(buffer, &tmp, sizeof(tmp));
  30. }
  31. static struct file_operations ds18b20_fops = {
  32. .owner = THIS_MODULE,
  33. .open = ds18b20_open,
  34. .read = ds18b20_read,
  35. };
  36. static struct miscdevice ds18b20_dev = {
  37. .minor = MISC_DYNAMIC_MINOR,
  38. .name = DEVICE_NAME,
  39. .nodename = NODE_NAME,
  40. .fops = &ds18b20_fops,
  41. };
  42. static int __init ds18b20_dev_init(void) {
  43. int ret;
  44. ret = gpio_request(gpio_num, DEVICE_NAME);
  45. if (ret) {
  46. printk("%s: request GPIO %d for GPE0 failed, ret = %d\n", DEVICE_NAME, gpio_num, ret);
  47. return ret;
  48. }
  49. ret = misc_register(&ds18b20_dev);//注册杂设备驱动
  50. printk(DEVICE_NAME"\tinitialized\n");
  51. return ret;
  52. }
  53. static void __exit ds18b20_dev_exit(void) {
  54. freeDs18b20();
  55. misc_deregister(&ds18b20_dev);
  56. }
  57. module_init(ds18b20_dev_init);
  58. module_exit(ds18b20_dev_exit);
  59. MODULE_LICENSE("GPL");
  60. MODULE_VERSION("1.0");
  61. MODULE_AUTHOR("shuixx.");