/*
* STMicroelectronics lps22hb driver
*
* Copyright 2016 STMicroelectronics Inc.
*
* Authors: HESA BU - Application Team
*        : Adalberto Muhuho (adalberto.muhuho@st.com)
*        : Mario Tesi (mario.tesi@st.com)
*
* The structure of this driver is based on reference code previously delivered
* by Lorenzo Sarchi
*
* Version: 0.0.3
* Date   : 2016/May/16
*
********************************************************************************
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* THE PRESENT SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES
* OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, FOR THE SOLE
* PURPOSE TO SUPPORT YOUR APPLICATION DEVELOPMENT.
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
* CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*/
/******************************************************************************
 Revision history:

 Revision 0.0.1 2015/Dec/11:
	first (BETA) release

 Revision 0.0.2 2016/Apr/19:
	Revision 0.0.2 downgrades previous License to GPLv2

 Revision 0.0.3 2016/May/16:
	Added SPI support
******************************************************************************/
#ifndef	__LPS22_H__
#define	__LPS22_H__

#define LPS22_PRS_MIN_POLL_PERIOD_MS	13
#define	LPS22_PRS_DEV_NAME		"lps22hb"
#define	LPS22_HD_PRS_DEV_NAME		"lps22hd"

/* input define mappings */
#define ABS_PR		ABS_PRESSURE
#define ABS_TEMP	ABS_GAS

/* Output conversion factors */
#define	LPS22HB_SENSITIVITY_T	100	/* = LSB/degrC */
#define	LPS22HB_SENSITIVITY_P	4096	/* = LSB/mbar */

#define	LPS22HB_TEMPERATURE_OFFSET	0

#define LPS22HB_RX_MAX_LENGTH	500
#define LPS22HB_TX_MAX_LENGTH	500

#define	RESUME_ENTRIES		16

#ifdef __KERNEL__
struct lps22_prs_data;

struct lps22_prs_platform_data {
	int (*init)(void);
	void (*exit)(void);
	int (*power_on)(void);
	int (*power_off)(void);

	unsigned int poll_interval;
	unsigned int min_interval;
};

struct lps22_prs_transfer_buffer {
	struct mutex buf_lock;
	u8 rx_buf[LPS22HB_RX_MAX_LENGTH];
	u8 tx_buf[LPS22HB_TX_MAX_LENGTH] ____cacheline_aligned;
};

struct lps22_prs_transfer_function {
	int (*write) (struct lps22_prs_data *cdata, u8 reg_addr, int len, u8 *data);
	int (*read) (struct lps22_prs_data *cdata, u8 reg_addr, int len, u8 *data);
};

struct lps22_prs_data {
	const char *name;
	struct lps22_prs_platform_data *pdata;

	struct mutex lock;
	struct workqueue_struct *workqueue;
	struct hrtimer hr_timer;
	ktime_t delta_ts;
	struct work_struct input_work;
	struct input_dev *input_dev_pres;

	struct device *dev;
	struct device *factory_dev;

	int hw_initialized;
	/* hw_working=-1 means not tested yet */
	int hw_working;
	u16 bustype;
	int irq;
	atomic_t enabled;
	int on_before_suspend;

	u8 resume_state[RESUME_ENTRIES];

#ifdef DEBUG
	u8 reg_addr;
#endif
	const struct lps22_prs_transfer_function *tf;
	struct lps22_prs_transfer_buffer tb;
};

#define INPUT_EVENT_TYPE	EV_MSC
#define INPUT_EVENT_X		MSC_SERIAL
#define INPUT_EVENT_Y		MSC_PULSELED
#define INPUT_EVENT_Z		MSC_GESTURE
#define INPUT_EVENT_TIME_MSB	MSC_SCAN
#define INPUT_EVENT_TIME_LSB	MSC_MAX

int lps22hb_common_probe(struct lps22_prs_data *prs);
int lps22hb_common_remove(struct lps22_prs_data *prs);
void lps22hb_common_shutdown(struct lps22_prs_data *prs);
#ifdef CONFIG_PM
int lps22hb_common_resume(struct lps22_prs_data *prs);
int lps22hb_common_suspend(struct lps22_prs_data *prs);
#endif /* CONFIG_PM */
#endif /* __KERNEL__ */

#endif  /* __LPS22_H__ */
