static INT32 f_TC90512_write(UINT8 dev_add, UINT8 reg_add, UINT8 *data, UINT8 len) { UINT8 i, buffer[8]; INT32 err; osal_semaphore_capture(f_IIC_Sema_ID,TMO_FEVR); //osal_interrupt_disable(); if (len > 7) { osal_semaphore_release(f_IIC_Sema_ID); //osal_interrupt_enable(); return ERR_FAILUE; } buffer[0] = reg_add; for (i = 0; i < len; i++) { buffer[i + 1] = data[i]; } err=i2c_gpio_write(0, dev_add, buffer, len + 1); if(err!=0) { NIM_TC90512_PRINTF("nim_TC90512_write: err = %d !\n", err); ; } osal_semaphore_release(f_IIC_Sema_ID); //osal_interrupt_enable(); return err; }
static RET_CODE i2c_gpio_std_read(lld_i2c_t *p_lld, u8 slv_addr, u8 *p_buf, u32 wlen, u32 rlen, u32 param) { RET_CODE ret = 0; i2c_gpio_priv_t *p_priv = (i2c_gpio_priv_t *)p_lld->p_priv; if(wlen == 0) { return i2c_gpio_read(p_lld, slv_addr, p_buf, rlen, param); } ret = i2c_gpio_write(p_lld, slv_addr, p_buf, wlen, param); if(SUCCESS != ret) { DEBUG("@@i2c seq_read error1!\n"); return ret; } ret = i2c_gpio_read_no_stop(p_priv, slv_addr, p_buf, rlen); if(SUCCESS != ret) { DEBUG("@@i2c seq_read error2!\n"); return ret; } i2c_gpio_phase_stop(p_priv); return SUCCESS; }
YW_ErrorType_T i2c_soft_write(YWI2CSoft_Handle_t Handle, U8 *Buffer_p, U32 MaxLen, U32 Timeout, U32 *ActLen_p) { int ret; //YW_ErrorType_T ErrorType = YW_NO_ERROR; U32 DeviceIndex, HandleIndex; YWI2CSoft_OpenParam_t *Param = (YWI2CSoft_OpenParam_t *)Handle; YWI2C_INTERFACE(("%s line:%d in\n", __FUNCTION__, __LINE__)); if (!CheckI2cParam(Handle, &DeviceIndex, &HandleIndex)) { YWI2C_DEBUG(("%s %d\n", __FUNCTION__, __LINE__)); return YWHAL_ERROR_INVALID_HANDLE; } if (!Param->IsOpen) { YWI2C_DEBUG(("%s %d\n", __FUNCTION__, __LINE__)); return YWHAL_ERROR_INVALID_HANDLE; } i2csoft_lock(DeviceIndex); #if 0 { int i; for (i = 0; i < MaxLen; i++) { printk("0x%x ", Buffer_p[i]); } printk("\n"); } #endif /* 0 */ ret = i2c_gpio_write(Param->SlaveAddr, Buffer_p, MaxLen, Timeout, &(I2CSoftDevice[DeviceIndex])); i2csoft_unlock(DeviceIndex); if (ret < 0) { return YWHAL_ERROR_FEATURE_NOT_SUPPORTED; } *ActLen_p = MaxLen - ret; YWI2C_INTERFACE(("%s line:%d OUT\n", __FUNCTION__, __LINE__)); return YW_NO_ERROR; }