| /******************************************************************************* | |
| * Copyright (C) 2007, ZTE Corporation. | |
| * | |
| * File Name: | |
| * File Mark: | |
| * Description: | |
| * Others: | |
| * Version: V0.5 | |
| * Author: Zhenghong | |
| * Date: 2008-01-10 | |
| * History 1: | |
| * Date: 2012-07-16 | |
| * Version: V1.0 | |
| * Author: zhouqi | |
| * Modification: 1. Ôö¼Ó T_ZDrvI2c_BusFreq ö¾ÙÖÐ 300KHZ ¶¨Òå | |
| 2. ÐÞ¸Ä T_ZDrvI2c_DevFlagType ÖеÚÒ»¸ö I2C_DFLT_ADDR_DEV Ϊ I2C_10BIT_SLAVE_ADDR | |
| 3. ÔÚ T_ZDrvI2c_DevFlagType Ôö¼Ó I2C_USE_INT ¶¨Òå | |
| 4. Ôö¼Ó²¿·Ö×¢ÊÍÓë˵Ã÷ | |
| * History 2: | |
| ******************************************************************************/ | |
| #ifndef _DRVS_I2C_H | |
| #define _DRVS_I2C_H | |
| /**********************************************************/ | |
| /** @defgroup T_ZDrvI2c_BusNum 7520ÓÐ 3 ¸öI2C½Ó¿Ú, 7520V2 È¥µôÒ»¸öI2C | |
| */ | |
| typedef enum | |
| { | |
| //I2C_BUS_0 = 0, | |
| I2C_BUS_1 = 1, | |
| I2C_BUS_2 = 2, /* pmic i2c */ | |
| MAX_I2C_BUS_NUM | |
| }T_ZDrvI2c_BusNum; | |
| /**********************************************************/ | |
| /** @defgroup T_ZDrvI2c_BusFreq | |
| */ | |
| typedef enum{ | |
| I2C_FREQ_ONE_HUNDRED_KILO_HZ = 100*1000, | |
| I2C_FREQ_THREE_HUNDRED_KILO_HZ = 300*1000, | |
| I2C_FREQ_FOUR_HUNDRED_KILO_HZ = 400*1000, | |
| MAX_I2C_BUS_FREQ | |
| }T_ZDrvI2c_BusFreq; | |
| /**********************************************************/ | |
| /** @defgroup T_ZDrvI2c_DevFlagType | |
| */ | |
| typedef enum { | |
| I2C_10BIT_SLAVE_ADDR = 0x0001 << 0, /* ±êʶʹÓà --10λ´Ó»úµØÖ·-- */ | |
| /* ĬÈϲ»Ê¹ÓÃλ 7λ´Ó»úµØÖ· */ | |
| I2C_MEM_DEV = 0x0001 << 1, /* ±êʶʹÓà --16λ¼Ä´æÆ÷µØÖ·-- */ | |
| I2C_REG_DEV = 0x0001 << 2, /* ±êʶʹÓà --8λ¼Ä´æÆ÷µØÖ·-- */ | |
| I2C_NACK_LAST_BYTE = 0x0001 << 3, /* NACK last byte read from slave */ | |
| I2C_NOP_LAST_BYTE = 0x0001 << 4, /* Let slave release SDA after last */ | |
| I2C_M_COMBINE = 0x0001 << 5, /* ¾µäµÄ×éºÏ¶Áģʽ */ | |
| I2C_STOP_START_BEFORE_READ = 0x0001 << 6, /* During a read transaction, gen. */ | |
| /* a STOP & START after writing */ | |
| /* the slave addr(just before read) */ | |
| I2C_CLK_START_BEFORE_RW = 0x0001 << 7, /* Generate a clock and a START */ | |
| /* before every I/O operation. */ | |
| I2C_USE_INT = 0x0001 << 8 /* ʹÓÃÖжÏģʽ´«ÊäÊý¾Ý */ | |
| /* Çø±ðΪ START ºó£¬»ñÈ¡ÐźÅÁ¿£¬Ïß³Ì¹ÒÆð*/ | |
| /* ½¨ÒéÔÚ´«ËͶà×Ö½ÚʱʹÓà */ | |
| } T_ZDrvI2c_DevFlagType; | |
| /**********************************************************************/ | |
| /* ˵Ã÷: | |
| 1. ÔÚĬÈÏÇé¿öÏ£¬Ê¹Óà 7λ ´Ó»úµØÖ·£¬ | |
| 8λ ¼Ä´æÆ÷µØÖ· | |
| ±ê׼ʱÐòµÄ ¼òµ¥Ð´¡¢ ¼òµ¥¶Á¡¢ ×éºÏ¶Áģʽ-- | |
| ²»Ê¹ÓÃÖÐ¶Ï | |
| 2. ÒÔǰÅäÖÃµÄ ÒÔϲÎÊýÏÖÔÚ²»ÔÙʹÓã¬ÏÈǰÅäÖõÄÒ²²»Óøü¸Ä£¬µ«¶¼Ä¬ÈÏΪ --±ê×¼×éºÏ¶ÁʱÐò-- | |
| Èç¹ûÓÐÌØÊâʱÐò£¬Çë¸æÖª | |
| I2C_NACK_LAST_BYTE ÔÚU207ûÓз¢ÏÖʹÓà | |
| I2C_NOP_LAST_BYTE ÔÚU207ûÓз¢ÏÖʹÓà | |
| I2C_M_COMBINE RDA5802\mt9d113ʹÓà | |
| I2C_STOP_START_BEFORE_READ PMIC\OV7670\0V9656ʹÓà | |
| I2C_CLK_START_BEFORE_RW ÔÚU207ûÓз¢ÏÖʹÓà | |
| 3. ÏÖÔڿɸù¾ÝÒ»ÏÂÁÐ×ÓÅäÖÃ: | |
| static T_ZDrvI2c_Device s_mt9d113I2cDev = | |
| { | |
| I2C_BUS_0, | |
| EXAMPLE_SLAVE_ADDRESS, | |
| I2C_FREQ_THREE_HUNDRED_KILO_HZ, | |
| 100, | |
| 1, | |
| ----------------------------------------------------------- | |
| I2C_10BIT_SLAVE_ADDR | I2C_REG_DEV | I2C_USE_INT, | |
| // ʹÓÃ10´Ó»úµØÖ· 8λ¼Ä´æÆ÷µØÖ· ʹÓÃÖжϷ½Ê½ | |
| I2C_MEM_DEV, | |
| // 16λ¼Ä´æÆ÷µØÖ·, 8´Ó»úµØÖ· ²»Ê¹ÓÃÖÐ¶Ï | |
| ---------------------------------------------------------- | |
| NULL, | |
| }; | |
| *********************************************************************/ | |
| /**********************************************************/ | |
| /** @defgroup T_ZDrvI2c_Device | |
| */ | |
| typedef struct _T_ZDrvI2c_Device | |
| { | |
| T_ZDrvI2c_BusNum bus_num; /* indicate which i2c bus the device belongs to */ | |
| UINT16 slv_addr; /* device addr on the i2c bus, 10bits for memory device and 7bits for registers */ | |
| T_ZDrvI2c_BusFreq bus_freq; /* the i2c bus transfer freq according to the device require*/ | |
| UINT32 timeout; /* time threshold waiting for bus idle */ | |
| UINT8 retries; /* times we'll try again if the bus is busy */ | |
| T_ZDrvI2c_DevFlagType flags; /* indicate the operation features */ | |
| VOID *privData; | |
| }T_ZDrvI2c_Device; | |
| /******************************************************************************* | |
| * Function Prototypes * | |
| *******************************************************************************/ | |
| /******************************************************************************* | |
| * Function: zDrvI2c_DevRead | |
| * Description: I2C×ÜÏß¼òµ¥¶Á | |
| * Parameters: | |
| * Input: | |
| * | |
| * Output: | |
| * | |
| * Returns: | |
| * | |
| * | |
| * Others: 1. ×ñÑI2C×ÜÏß ×éºÏ¶Á ±êÏßÐÒé¡£ | |
| 2. ×î´óÒ»´Î¶ÁÈ¡ --32-- ¸ö×Ö½ÚÊý¾Ý¡£ | |
| ********************************************************************************/ | |
| SINT32 zDrvI2c_DevRead( T_ZDrvI2c_Device *i2c_dev, UINT16 regAddr, UINT8 *readBuf, UINT32 readNum ); | |
| /******************************************************************************* | |
| * Function: zDrvI2c_DevWrite | |
| * Description: I2C×ÜÏß¼òµ¥Ð´ | |
| * Parameters: | |
| * Input: | |
| * | |
| * Output: | |
| * | |
| * Returns: | |
| * | |
| * | |
| * Others: 1. ×ñÑI2C×ÜÏß ¼òµ¥Ð´ ±êÏßÐÒé¡£ | |
| 2. ×î´óÒ»´ÎдÈë --30-- ¸ö×Ö½ÚÊý¾Ý¡£ | |
| ********************************************************************************/ | |
| SINT32 zDrvI2c_DevWrite( T_ZDrvI2c_Device *i2c_dev, UINT16 regAddr, UINT8 *writeBuf, UINT32 writeNum ); | |
| /******************************************************************************* | |
| * Function: zDrvI2c_DevLock_BeforePSM | |
| * Description: ÔÚ¹ØÖжϲ¢µ÷Óà PSM ½Ó¿Úǰ£¬»ñÈ¡ I2C Éè±¸Ëø¡£ | |
| * Parameters: | |
| * Input: | |
| * | |
| * Output: | |
| * | |
| * Returns: | |
| * | |
| * | |
| * Others: 1. ¹ØÖжϲ¢µ÷Óà PSM ½Ó¿Úʱ£¬I2C ¿ÉÄÜÕýÔÚ±»ÆäËûÏß³ÌʹÓᣠ| |
| * ʹÓô˽ӿڵȴýÆäËûÏß³ÌʹÓÃÍê±ÏºóÍ˳ö¡£ | |
| ********************************************************************************/ | |
| SINT32 zDrvI2c_DevLock_BeforePSM( T_ZDrvI2c_BusNum busNum); | |
| /******************************************************************************* | |
| * Function: zDrvI2c_DevUnlock_AfterPSM | |
| * Description: ²»ÔÙʹÓà PSM ½Ó¿Úʱ£¬ÊÍ·Å I2C Éè±¸Ëø¡£ | |
| * Parameters: | |
| * Input: | |
| * | |
| * Output: | |
| * | |
| * Returns: | |
| * | |
| * | |
| * Others: 1. ÓëzDrvI2c_DevLock_BeforePSM½á¶ÔʹÓᣠ| |
| ********************************************************************************/ | |
| SINT32 zDrvI2c_DevUnlock_AfterPSM( T_ZDrvI2c_BusNum busNum); | |
| /******************************************************************************* | |
| * Function: zDrvI2c_DevRead | |
| * Description: I2C×ÜÏß¼òµ¥¶Á£¬Ê¹ÓÃÊ¡µçģʽ | |
| * Parameters: | |
| * Input: | |
| * | |
| * Output: | |
| * | |
| * Returns: | |
| * | |
| * | |
| * Others: 1. ×ñÑI2C×ÜÏß ×éºÏ¶Á ±êÏßÐÒé¡£ | |
| 2. ×î´óÒ»´Î¶ÁÈ¡ --32-- ¸ö×Ö½ÚÊý¾Ý¡£ | |
| 3. Ö÷ÒªÊÇÔÚ²Ù×÷ÖÐ --²»»ñÈ¡»¥³âÁ¿--£¬ Á½µÄÏ̲߳»ÄÜͬʱµ÷Óà | |
| ********************************************************************************/ | |
| SINT32 zDrvI2c_DevRead_PSM( T_ZDrvI2c_Device *i2c_dev, UINT16 regAddr, UINT8 *readBuf, UINT32 readNum ); | |
| /******************************************************************************* | |
| * Function: zDrvI2c_DevWrite | |
| * Description: I2C×ÜÏß¼òµ¥Ð´£¬Ê¹ÓÃÊ¡µçģʽ | |
| * Parameters: | |
| * Input: | |
| * | |
| * Output: | |
| * | |
| * Returns: | |
| * | |
| * | |
| * Others: 1. ×ñÑI2C×ÜÏß ¼òµ¥Ð´ ±êÏßÐÒé¡£ | |
| 2. ×î´óÒ»´ÎдÈë --30-- ¸ö×Ö½ÚÊý¾Ý¡£ | |
| 3. Ö÷ÒªÊÇÔÚ²Ù×÷ÖÐ --²»»ñÈ¡»¥³âÁ¿--£¬ Á½µÄÏ̲߳»ÄÜͬʱµ÷Óà | |
| ********************************************************************************/ | |
| SINT32 zDrvI2c_DevWrite_PSM( T_ZDrvI2c_Device *i2c_dev, UINT16 regAddr, UINT8 *writeBuf, UINT32 writeNum ); | |
| /******************************************************************************* | |
| * Function: zDrvI2c_DevRead_ByteStream | |
| * Description: I2C×ÜÏß×Ö½ÚÁ÷¶Á | |
| * Parameters: | |
| * Input: | |
| * | |
| * Output: | |
| * | |
| * Returns: | |
| * | |
| * | |
| * Others: 1. ×ñÑI2C×ÜÏß ¼òµ¥¶Á ±êÏßÐÒé¡£ | |
| 2. ֻд I2C Æ÷¼þµØÖ·£¬----------²»Ê¹ÓüĴæÆ÷µØÖ·-----¡£ | |
| 2. ×î´óÒ»´Î¶ÁÈ¡ 32 ¸ö×Ö½ÚÊý¾Ý¡£ | |
| ********************************************************************************/ | |
| SINT32 zDrvI2c_DevRead_ByteStream( T_ZDrvI2c_Device *i2c_dev, UINT8 *readBuf, UINT32 readNum ); | |
| /******************************************************************************* | |
| * Function: zDrvI2c_DevWrite_ByteStream | |
| * Description: I2C×ÜÏß×Ö½ÚÁ÷д | |
| * Parameters: | |
| * Input: | |
| * | |
| * Output: | |
| * | |
| * Returns: | |
| * | |
| * | |
| * Others: 1. ×ñÑI2C×ÜÏß ¼òµ¥Ð´ ±êÏßÐÒé¡£ | |
| 2. ֻд I2C Æ÷¼þµØÖ·£¬----------²»Ê¹ÓüĴæÆ÷µØÖ·-----¡£ | |
| 2. ×î´óÒ»´ÎдÈë 30 ¸ö×Ö½ÚÊý¾Ý¡£ | |
| ********************************************************************************/ | |
| SINT32 zDrvI2c_DevWrite_ByteStream( T_ZDrvI2c_Device *i2c_dev, UINT8 *writeBuf, UINT32 writeNum ); | |
| #endif /* _DRVS_I2C_H */ | |