pinebuds/platform/hal/hal_slave_i2c.c

59 lines
1.7 KiB
C

/***************************************************************************
*
* Copyright 2015-2020 BES.
* All rights reserved. All unpublished rights reserved.
*
* No part of this work may be used or reproduced in any form or by any
* means, or stored in a database or retrieval system, without prior written
* permission of BES.
*
* Use of this work is governed by a license granted by BES.
* This work contains confidential and proprietary information of
* BES. which is protected by copyright, trade secret,
* trademark and other intellectual property rights.
*
****************************************************************************/
#include "plat_addr_map.h"
#ifdef I2C_SLAVE_BASE
#include "hal_slave_i2c.h"
#include "reg_slave_i2c.h"
static struct SLAVE_I2C_T *const slave_i2c =
(struct SLAVE_I2C_T *)I2C_SLAVE_BASE;
void hal_slave_i2c_enable(void) { slave_i2c->EN |= I2C_EN; }
void hal_slave_i2c_disable(void) { slave_i2c->EN &= ~I2C_EN; }
uint32_t hal_slave_i2c_get_filter_len(void) {
return GET_BITFIELD(slave_i2c->EN, R_FILTERLEN);
}
int hal_slave_i2c_set_filter_len(uint32_t len) {
if (len > (W_FILTERLEN_MASK >> W_FILTERLEN_SHIFT)) {
return 1;
}
slave_i2c->EN = SET_BITFIELD(slave_i2c->EN, W_FILTERLEN, len);
return 0;
}
uint32_t hal_slave_i2c_get_dev_id(void) {
return GET_BITFIELD(slave_i2c->ID, DEV_ID);
}
int hal_slave_i2c_set_dev_id(uint32_t dev_id) {
if (dev_id > 0x7F) {
return 1;
}
slave_i2c->ID = SET_BITFIELD(slave_i2c->ID, DEV_ID, dev_id);
return 0;
}
void hal_slave_i2c_bypass_timeout(void) { slave_i2c->TBP |= TIMEOUT_BYPASS; }
void hal_slave_i2c_restore_timeout(void) { slave_i2c->TBP &= ~TIMEOUT_BYPASS; }
#endif