#include "fsl_i2c.h" #include "pixart_pah8001ei.h" #define PAH8001_SLAVE_ADDRESS 0x33 #define PAH8001_I2C_INSTANCE I2C0 pah_ret_t pah8001_impl_init(void *pdev) { /* I2C initialization by tool. */ return PAH_RET_OK; } pah_ret_t pah8001_impl_write(void *pdev, uint8_t reg, uint8_t *value, uint16_t len) { i2c_master_transfer_t xfer = { .slaveAddress = PAH8001_SLAVE_ADDRESS, .subaddress = reg, .subaddressSize = 1U, .direction = kI2C_Write, .data = value, .dataSize = len, .flags = kI2C_TransferDefaultFlag, }; if (I2C_MasterTransferBlocking(PAH8001_I2C_INSTANCE, &xfer) != kStatus_Success) { return PAH_RET_FAIL; } if(I2C_MasterStop(PAH8001_I2C_INSTANCE) != kStatus_Success) { return PAH_RET_FAIL; } return PAH_RET_OK; } pah_ret_t pah8001_impl_read(void *pdev, uint8_t reg, uint8_t *value, uint16_t len) { i2c_master_transfer_t xfer = { .slaveAddress = PAH8001_SLAVE_ADDRESS, .subaddress = reg, .subaddressSize = 1U, .direction = kI2C_Read, .data = value, .dataSize = len, .flags = kI2C_TransferDefaultFlag, }; if (I2C_MasterTransferBlocking(I2C0, &xfer) != kStatus_Success) { return PAH_RET_FAIL; } if(I2C_MasterStop(PAH8001_I2C_INSTANCE) != kStatus_Success) { return PAH_RET_FAIL; } return PAH_RET_OK; }