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

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *  i2c_pxa.h
  3.  *
  4.  *  Copyright (C) 2002 Intrinsyc Software Inc.
  5.  * 
  6.  *  This program is free software; you can redistribute it and/or modify
  7.  *  it under the terms of the GNU General Public License version 2 as
  8.  *  published by the Free Software Foundation.
  9.  *
  10.  */
  11. #ifndef _I2C_PXA_H_
  12. #define _I2C_PXA_H_
  13. struct i2c_algo_pxa_data
  14. {
  15.         void (*write_byte) (u8 value);
  16.         u8   (*read_byte) (void);
  17.         void (*start) (void);
  18.         void (*repeat_start) (void);
  19.         void (*stop) (void);
  20.         void (*abort) (void);
  21.         int  (*wait_bus_not_busy) (void);
  22.         int  (*wait_for_interrupt) (int wait_type);
  23.         void (*transfer) (int lastbyte, int receive, int midbyte);
  24.         void (*reset) (void);
  25. int udelay;
  26. int timeout;
  27. };
  28. #define DEF_TIMEOUT             3
  29. #define BUS_ERROR               (-EREMOTEIO)
  30. #define ACK_DELAY               0       /* time to delay before checking bus error */
  31. #define MAX_MESSAGES            65536   /* maximum number of messages to send */
  32. #define I2C_SLEEP_TIMEOUT       2       /* time to sleep for on i2c transactions */
  33. #define I2C_RETRY               (-2000) /* an error has occurred retry transmit */
  34. #define I2C_TRANSMIT 1
  35. #define I2C_RECEIVE 0
  36. #define I2C_PXA_SLAVE_ADDR      0x1    /* slave pxa unit address */
  37. #define I2C_ICR_INIT            (ICR_BEIE | ICR_IRFIE | ICR_ITEIE | ICR_GCD | ICR_SCLE) /* ICR initialization value */
  38. /* ICR initialize bit values 
  39. *                       
  40. *  15. FM       0 (100 Khz operation)
  41. *  14. UR       0 (No unit reset)
  42. *  13. SADIE    0 (Disables the unit from interrupting on slave addresses 
  43. *                                       matching its slave address)
  44. *  12. ALDIE    0 (Disables the unit from interrupt when it loses arbitration 
  45. *                                       in master mode)
  46. *  11. SSDIE    0 (Disables interrupts from a slave stop detected, in slave mode)  
  47. *  10. BEIE     1 (Enable interrupts from detected bus errors, no ACK sent)
  48. *  9.  IRFIE    1 (Enable interrupts from full buffer received)
  49. *  8.  ITEIE    1 (Enables the I2C unit to interrupt when transmit buffer empty)
  50. *  7.  GCD      1 (Disables i2c unit response to general call messages as a slave) 
  51. *  6.  IUE      0 (Disable unit until we change settings)
  52. *  5.  SCLE     1 (Enables the i2c clock output for master mode (drives SCL)   
  53. *  4.  MA       0 (Only send stop with the ICR stop bit)
  54. *  3.  TB       0 (We are not transmitting a byte initially)
  55. *  2.  ACKNAK   0 (Send an ACK after the unit receives a byte)
  56. *  1.  STOP     0 (Do not send a STOP)
  57. *  0.  START    0 (Do not send a START)
  58. *
  59. */
  60. #define I2C_ISR_INIT            0x7FF  /* status register init */
  61. /* I2C status register init values 
  62.  *
  63.  * 10. BED      1 (Clear bus error detected)
  64.  * 9.  SAD      1 (Clear slave address detected)
  65.  * 7.  IRF      1 (Clear IDBR Receive Full)
  66.  * 6.  ITE      1 (Clear IDBR Transmit Empty)
  67.  * 5.  ALD      1 (Clear Arbitration Loss Detected)
  68.  * 4.  SSD      1 (Clear Slave Stop Detected)
  69.  */
  70. #endif