MXL_STATUS Ctrl_ProgramRegisters(UINT8 I2cSlaveAddr, PREG_CTRL_INFO_T ctrlRegInfoPtr)
{
  UINT8 status = MXL_TRUE;
  UINT16 i, tmp;
  
  i = 0;

  while (1)
  {
    if ((ctrlRegInfoPtr[i].regAddr == 0) && (ctrlRegInfoPtr[i].mask == 0) && (ctrlRegInfoPtr[i].data == 0)) break;

    // Check if partial bits of register were updated
    if (ctrlRegInfoPtr[i].mask != 0xFFFF)  
    {
      status |= Ctrl_ReadRegister(I2cSlaveAddr, ctrlRegInfoPtr[i].regAddr, &tmp);
      if (status != MXL_TRUE) break;;
    }
    
    tmp &= ~ctrlRegInfoPtr[i].mask;
    tmp |= ctrlRegInfoPtr[i].data;

    status |= Ctrl_WriteRegister(I2cSlaveAddr, ctrlRegInfoPtr[i].regAddr, tmp);
    if (status != MXL_TRUE) break;

    i++;
  }

  return (MXL_STATUS)status;
}
Esempio n. 2
0
MXL_STATUS Ctrl_ProgramRegisters(PREG_CTRL_INFO_T ctrlRegInfoPtr, struct aml_fe_dev *fe)
{
  UINT8 status = MXL_TRUE;
  UINT16 i;
  UINT8 tmp;

  for (i = 0; ctrlRegInfoPtr[i].regAddr|ctrlRegInfoPtr[i].mask|ctrlRegInfoPtr[i].data; i++)
  {
    // Check if partial bits of register were updated
    if (ctrlRegInfoPtr[i].mask != 0xFF)
    {
      status = Ctrl_ReadRegister(ctrlRegInfoPtr[i].regAddr, &tmp, fe);
      if (status != MXL_TRUE) break;;
    }

    tmp &= ~ctrlRegInfoPtr[i].mask;
    tmp |= ctrlRegInfoPtr[i].data;

    status |= Ctrl_WriteRegister(ctrlRegInfoPtr[i].regAddr, tmp, fe);
    if (status != MXL_TRUE) break;
  }

  return (MXL_STATUS)status;
}