/*
 *
 * Copyright (C) 2012-2019, Samsung Electronics Co., Ltd.
 *
 * SEC Touch protocol header file
 */

#ifndef _SEC_DRIVER_H_
#define _SEC_DRIVER_H_

#include <tee_internal_api.h>
#include "tuiHal.h"
#include "touch_queue.h"

#if defined(TUI_MODEL_BEYOND2)
struct sec_ts_event_coordinate{
    uint8_t eid:2;
    uint8_t tid:4;
    uint8_t tchsta:2;
    uint8_t x_11_4;
    uint8_t y_11_4;
    uint8_t y_3_0:4;
    uint8_t x_3_0:4;
    uint8_t major;
    uint8_t minor;
    uint8_t z:6;
    uint8_t ttype_3_2:2;
    uint8_t left_event:5;
    uint8_t max_energy_flag:1;
    uint8_t ttype_1_0:2;
} __attribute__ ((packed));

struct sec_ts_event_status {
    uint8_t eid:2;
    uint8_t stype:4;
    uint8_t sf:2;
    uint8_t status_id;
    uint8_t status_data_1;
    uint8_t status_data_2;
    uint8_t status_data_3;
    uint8_t status_data_4;
    uint8_t status_data_5;
    uint8_t left_event_5_0:6;
    uint8_t reserved_2:2;
} __attribute__ ((packed));
#endif /* TUI_MODEL_BEYOND2 */

#if defined(TUI_MODEL_PICASSO) || defined(TUI_MODEL_A71X) || defined(TUI_MODEL_N2S) || defined(TUI_MODEL_A32)
/* 16 byte */
struct sec_ts_event_coordinate {
    uint8_t eid:2;
    uint8_t tid:4;
    uint8_t tchsta:2;
    uint8_t x_11_4;
    uint8_t y_11_4;
    uint8_t y_3_0:4;
    uint8_t x_3_0:4;
    uint8_t major;
    uint8_t minor;
    uint8_t z:6;
    uint8_t ttype_3_2:2;
    uint8_t left_event:5;
    uint8_t max_energy_flag:1;
    uint8_t ttype_1_0:2;
    uint8_t noise_level;
    uint8_t max_strength;
    uint8_t hover_id_num:4;
    uint8_t reserved10:4;
    uint8_t reserved11;
    uint8_t reserved12;
    uint8_t reserved13;
    uint8_t reserved14;
    uint8_t reserved15;
} __attribute__ ((packed));

/* 16 byte */
struct sec_ts_event_status {
    uint8_t eid:2;
    uint8_t stype:4;
    uint8_t sf:2;
    uint8_t status_id;
    uint8_t status_data_1;
    uint8_t status_data_2;
    uint8_t status_data_3;
    uint8_t status_data_4;
    uint8_t status_data_5;
    uint8_t left_event_5_0:5;
    uint8_t reserved_2:3;
    uint8_t noise_level;
    uint8_t max_strength;
    uint8_t hover_id_num:4;
    uint8_t reserved10:4;
    uint8_t reserved11;
    uint8_t reserved12;
    uint8_t reserved13;
    uint8_t reserved14;
    uint8_t reserved15;
} __attribute__ ((packed));
#endif /* TUI_MODEL_PICASSO */

struct sec_ts_info {
    unsigned int initialized;
    unsigned int max_x;
    unsigned int max_y;
    unsigned int width;
    unsigned int height;
    int (*i2c_read)(uint16_t addr, uint8_t *data, uint16_t size);
    int (*i2c_write)(uint16_t addr, uint8_t *data, uint16_t size);
};

extern struct sec_ts_info ts_data;

int sec_driver_init(struct sec_ts_info *sec_dev);
int sec_driver_release(struct sec_ts_info *sec_dev);
int sec_irq_process(void);

#endif /* _SEC_DRIVER_H_ */
