s3c2410_ir.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:3k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * drivers/net/irda/s3c2410_ir.c
  3.  *
  4.  * IR port driver for the SMDK2410
  5.  *
  6.  * Author: Yong-iL Joh <tolkien@mizi.com>
  7.  * Date  : $Date: 2003/06/12 02:55:06 $
  8.  *
  9.  * $Revision: 1.1.2.4 $
  10.  *
  11.    Wed Jun 11 2003 Yong-iL Joh <tolkien@mizi.com>
  12.    - initial based on ep7211_ir.c
  13.  *
  14.  * This file is subject to the terms and conditions of the GNU General Public
  15.  * License.  See the file COPYING in the main directory of this archive
  16.  * for more details.
  17.  */
  18. #include <linux/module.h>
  19. #include <linux/delay.h>
  20. #include <linux/tty.h>
  21. #include <linux/sched.h>
  22. #include <linux/init.h>
  23. #include <net/irda/irda.h>
  24. #include <net/irda/irmod.h>
  25. #include <net/irda/irda_device.h>
  26. #include <asm/io.h>
  27. #include <asm/hardware.h>
  28. #include <asm/arch/cpu_s3c2410.h>
  29. #define MIN_DELAY 25      /* 15 us, but wait a little more to be sure */
  30. #define MAX_DELAY 10000   /* 1 ms */
  31. static void s3c2410_ir_open(dongle_t *self, struct qos_info *qos);
  32. static void s3c2410_ir_close(dongle_t *self);
  33. static int  s3c2410_ir_change_speed(struct irda_task *task);
  34. static int  s3c2410_ir_reset(struct irda_task *task);
  35. static struct dongle_reg dongle = {
  36. Q_NULL,
  37. IRDA_S3C2410_IR,
  38. s3c2410_ir_open,
  39. s3c2410_ir_close,
  40. s3c2410_ir_reset,
  41. s3c2410_ir_change_speed,
  42. };
  43. static void s3c2410_ir_open(dongle_t *self, struct qos_info *qos) {
  44. unsigned int flags;
  45. unsigned long clk;
  46. save_flags(flags); cli();
  47. /* Turn on the SIR encoder.
  48.    No parity, 8bit, 1 stop bit */
  49.    ULCON2 |= ULCON_IR | ULCON_PAR_NONE | ULCON_WL8 | ULCON_ONE_STOP;
  50. /* select PCLK for UART baud rate */
  51. UCON2 |= (UCON2 & ~UCON_CLK_SEL) | UCON_CLK_PCLK;
  52. clk = s3c2410_get_bus_clk(GET_PCLK);
  53. UBRDIV2 = (clk / (115200 * 16) ) - 1;
  54. restore_flags(flags);
  55. MOD_INC_USE_COUNT;
  56. }
  57. static void s3c2410_ir_close(dongle_t *self) {
  58. unsigned int flags;
  59. save_flags(flags); cli();
  60. /* Turn off the SIR encoder. */
  61. ULCON2 &= ~ULCON_IR;
  62. restore_flags(flags);
  63. MOD_DEC_USE_COUNT;
  64. }
  65. static int s3c2410_ir_change_speed(struct irda_task *task) {
  66. irda_task_next_state(task, IRDA_TASK_DONE);
  67. return 0;
  68. }
  69. static int s3c2410_ir_reset(struct irda_task *task) {
  70. irda_task_next_state(task, IRDA_TASK_DONE);
  71. return 0;
  72. }
  73. static int __init s3c2410_ir_init(void) {
  74. return irda_device_register_dongle(&dongle);
  75. }
  76. static void __exit s3c2410_ir_cleanup(void) {
  77. irda_device_unregister_dongle(&dongle);
  78. }
  79. MODULE_AUTHOR("Yong-iL Joh <tolkien@mizi.com>");
  80. MODULE_DESCRIPTION("S3C2410 I/R driver");
  81. MODULE_LICENSE("GPL");
  82. module_init(s3c2410_ir_init);
  83. module_exit(s3c2410_ir_cleanup);
  84. /*
  85.  | $Id: s3c2410_ir.c,v 1.1.2.4 2003/06/12 02:55:06 tolkien Exp $
  86.  |
  87.  | Local Variables:
  88.  | mode: c
  89.  | mode: font-lock
  90.  | version-control: t
  91.  | delete-old-versions: t
  92.  | End:
  93.  |
  94.  | -*- End-Of-File -*-
  95.  */