mirror of
https://github.com/openharmony/drivers_framework.git
synced 2026-08-26 18:17:07 -04:00
add sensor hall driver
Signed-off-by: jifengfei <jifengfei2@huawei.com>
This commit is contained in:
@@ -24,26 +24,26 @@ int32_t ReadAk8789Data(struct SensorCfgData *data)
|
||||
int32_t ret;
|
||||
uint8_t tmp = 1;
|
||||
OsalTimespec time;
|
||||
struct SensorReportEvent event;
|
||||
|
||||
struct SensorReportEvent event;
|
||||
|
||||
CHECK_NULL_PTR_RETURN_VALUE(data, HDF_ERR_INVALID_PARAM);
|
||||
|
||||
(void)memset_s(&event, sizeof(event), 0, sizeof(event));
|
||||
(void)memset_s(&time, sizeof(time), 0, sizeof(time));
|
||||
if (OsalGetTime(&time) != HDF_SUCCESS) {
|
||||
if (OsalGetTime(&time) != HDF_SUCCESS) {
|
||||
HDF_LOGE("%s: Get time failed", __func__);
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
|
||||
event.timestamp = time.sec * SENSOR_SECOND_CONVERT_NANOSECOND + time.usec *
|
||||
SENSOR_CONVERT_UNIT; /* unit nanosecond */
|
||||
event.sensorId = SENSOR_TAG_HALL;
|
||||
event.timestamp = time.sec * SENSOR_SECOND_CONVERT_NANOSECOND + time.usec *
|
||||
SENSOR_CONVERT_UNIT; /* unit nanosecond */
|
||||
event.sensorId = SENSOR_TAG_HALL;
|
||||
event.version = 0;
|
||||
event.option = 0;
|
||||
event.mode = SENSOR_WORK_MODE_ON_CHANGE;
|
||||
event.dataLen = sizeof(tmp);
|
||||
event.data = (uint8_t *)&tmp;
|
||||
ret = ReportSensorEvent(&event);
|
||||
event.option = 0;
|
||||
event.mode = SENSOR_WORK_MODE_ON_CHANGE;
|
||||
event.dataLen = sizeof(tmp);
|
||||
event.data = (uint8_t *)&tmp;
|
||||
ret = ReportSensorEvent(&event);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
static struct HallDetectIfList g_hallDetectIfList[] = {
|
||||
{HALL_CHIP_NAME_AK8789, DetectHallAk8789Chip},
|
||||
};
|
||||
};
|
||||
|
||||
static struct HallDrvData *g_hallDrvData = NULL;
|
||||
|
||||
@@ -40,7 +40,7 @@ int32_t RegisterHallChipOps(const struct HallOpsCall *ops)
|
||||
CHECK_NULL_PTR_RETURN_VALUE(ops, HDF_ERR_INVALID_PARAM);
|
||||
drvData = HallGetDrvData();
|
||||
CHECK_NULL_PTR_RETURN_VALUE(drvData, HDF_ERR_INVALID_PARAM);
|
||||
drvData->ops.Init = ops->Init;
|
||||
drvData->ops.Init = ops->Init;
|
||||
drvData->ops.ReadData = ops->ReadData;
|
||||
return HDF_SUCCESS;
|
||||
}
|
||||
@@ -58,7 +58,7 @@ static void HallDataWorkEntry(void *arg)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static int32_t HallNorthPolarityIrqFunc(uint16_t gpio, void *data)
|
||||
{
|
||||
(void)gpio;
|
||||
@@ -123,7 +123,7 @@ static int32_t SetHallEnable(void)
|
||||
HDF_LOGE("%s: hall sensor is enabled", __func__);
|
||||
return HDF_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
if (drvData->GpioIrq[HALL_NORTH_POLARITY_GPIO] >= 0) {
|
||||
ret = GpioSetIrq(drvData->GpioIrq[HALL_NORTH_POLARITY_GPIO], OSAL_IRQF_TRIGGER_FALLING,
|
||||
HallNorthPolarityIrqFunc, drvData);
|
||||
@@ -135,7 +135,7 @@ static int32_t SetHallEnable(void)
|
||||
HDF_LOGE("gpio enable north irq failed: %d", ret);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (drvData->GpioIrq[HALL_SOUTH_POLARITY_GPIO] >= 0) {
|
||||
ret = GpioSetIrq(drvData->GpioIrq[HALL_SOUTH_POLARITY_GPIO], OSAL_IRQF_TRIGGER_FALLING,
|
||||
HallSouthPolarityIrqFunc, drvData);
|
||||
@@ -168,17 +168,19 @@ static int32_t SetHallDisable(void)
|
||||
if (ret != 0) {
|
||||
HDF_LOGE("%s: gpio unset north irq failed", __func__);
|
||||
}
|
||||
|
||||
ret = GpioDisableIrq(drvData->GpioIrq[HALL_NORTH_POLARITY_GPIO]);
|
||||
if (ret != 0) {
|
||||
HDF_LOGE("%s: gpio disable north irq failed", __func__);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (drvData->GpioIrq[HALL_SOUTH_POLARITY_GPIO] >= 0) {
|
||||
ret = GpioUnSetIrq(drvData->GpioIrq[HALL_SOUTH_POLARITY_GPIO]);
|
||||
if (ret != 0) {
|
||||
HDF_LOGE("%s: gpio unset south irq failed", __func__);
|
||||
}
|
||||
|
||||
ret = GpioDisableIrq(drvData->GpioIrq[HALL_SOUTH_POLARITY_GPIO]);
|
||||
if (ret != 0) {
|
||||
HDF_LOGE("%s: gpio disable south irq failed", __func__);
|
||||
@@ -260,7 +262,7 @@ static int32_t InitHallAfterConfig(void)
|
||||
if (InitHallData() != HDF_SUCCESS) {
|
||||
HDF_LOGE("%s: init hall config failed", __func__);
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
if (InitHallOps(&deviceInfo) != HDF_SUCCESS) {
|
||||
HDF_LOGE("%s: init hall ops failed", __func__);
|
||||
@@ -384,6 +386,7 @@ int32_t InitHallDriver(struct HdfDeviceObject *device)
|
||||
HDF_LOGE("%s: hall sensor detect device no exist", __func__);
|
||||
goto DETECT_CHIP_EXIT;
|
||||
}
|
||||
|
||||
drvData->detectFlag = true;
|
||||
|
||||
if (InitHallAfterConfig() != HDF_SUCCESS) {
|
||||
|
||||
Reference in New Issue
Block a user