Files
luban-lite-t3e-pro/bsp/artinchip/include/hal/hal_rtp.h

110 lines
2.6 KiB
C
Raw Normal View History

2023-08-30 16:21:18 +08:00
/*
* Copyright (c) 2022-2023, ArtInChip Technology Co., Ltd
*
* SPDX-License-Identifier: Apache-2.0
*
* Authors: matteo <duanmt@artinchip.com>
*/
#ifndef _ARTINCHIP_HAL_RTP_H__
#define _ARTINCHIP_HAL_RTP_H__
#define AIC_RTP_NAME "aic-rtp"
#define AIC_RTP_FIFO_DEPTH 16
#define AIC_RTP_DEFAULT_X_PLATE 280
#define AIC_RTP_DEFAULT_Y_PLATE 600
#define AIC_RTP_SCATTER_THD 48
#define AIC_RTP_MAX_VAL 0xFFF
#define AIC_RTP_VAL_RANGE (AIC_RTP_MAX_VAL + 1)
#define AIC_RTP_INVALID_VAL (AIC_RTP_MAX_VAL + 1)
2024-04-03 16:40:57 +08:00
#define AIC_RTP_INVALID_MIN_VAL 50
2023-08-30 16:21:18 +08:00
#define AIC_RTP_EVT_BUF_SIZE 64
enum aic_rtp_mode {
RTP_MODE_MANUAL = 0, /* Unsupported in RTOS */
RTP_MODE_AUTO1,
RTP_MODE_AUTO2, /* Default mode: AUTO2 + Period */
RTP_MODE_AUTO3,
RTP_MODE_AUTO4
};
struct aic_rtp_dat {
u16 y_minus;
u16 x_minus;
u16 y_plus;
u16 x_plus;
u16 z_a;
u16 z_b;
u16 z_c;
u16 z_d;
u32 timestamp;
};
struct aic_rtp_event {
u16 x;
u16 y;
u16 pressure;
u16 down;
u32 timestamp;
};
struct aic_rtp_ebuf {
u16 rd_pos;
u16 wr_pos;
struct aic_rtp_event event[AIC_RTP_EVT_BUF_SIZE];
};
typedef s32 (*rtp_callback_t)(void);
struct aic_rtp_dev {
u32 pclk_rate;
rtp_callback_t callback;
s32 pressure_det;
s32 ignore_fifo_data;
enum aic_rtp_mode mode;
u32 max_press;
u32 smp_period; /* unit: ms */
u32 x_plate;
u32 y_plate;
u32 fuzz;
2023-11-09 20:19:51 +08:00
u32 delay;
2023-08-30 16:21:18 +08:00
u32 intr;
u32 fcr;
struct aic_rtp_dat latest;
aicos_sem_t sem;
struct aic_rtp_ebuf ebuf;
u16 point_num;
};
typedef struct {
int x[5], xfb[5];
int y[5], yfb[5];
int a[7];
} calibration;
void hal_rtp_status_show(struct aic_rtp_dev *rtp);
void hal_rtp_enable(struct aic_rtp_dev *rtp, int en);
void hal_rtp_int_enable(struct aic_rtp_dev *rtp, int en);
void hal_rtp_auto_mode(struct aic_rtp_dev *rtp);
irqreturn_t hal_rtp_isr(int irq, void *arg);
u32 hal_rtp_ebuf_read_space(struct aic_rtp_ebuf *ebuf);
#define hal_rtp_ebuf_write_space(buf) \
(AIC_RTP_EVT_BUF_SIZE - hal_rtp_ebuf_read_space(buf))
#define hal_rtp_ebuf_full(buf) (hal_rtp_ebuf_write_space(buf) == 0)
#define hal_rtp_ebuf_empty(buf) (hal_rtp_ebuf_read_space((buf)) == 0)
s32 hal_rtp_ebuf_write(struct aic_rtp_ebuf *ebuf, struct aic_rtp_event *e);
s32 hal_rtp_ebuf_read(struct aic_rtp_ebuf *ebuf, struct aic_rtp_event *e);
2024-04-03 16:40:57 +08:00
s32 hal_rtp_ebuf_init(struct aic_rtp_ebuf *ebuf);
2023-08-30 16:21:18 +08:00
s32 hal_rtp_clk_init(void);
s32 hal_rtp_register_callback(rtp_callback_t callback);
s32 hal_rtp_ebuf_sync(struct aic_rtp_ebuf *ebuf);
2024-01-27 08:47:24 +08:00
u32 hal_rtp_pdeb_valid_check(struct aic_rtp_dev *rtp);
2023-08-30 16:21:18 +08:00
#endif