#include "fingerprint_common.h"

void set_sensor_type(const int type_value, int *result)
{
	if (type_value >= SENSOR_OOO) {
		if (type_value == SENSOR_OOO && *result == SENSOR_FAILED) {
			pr_info("maintain type check from out of order :%s\n",
				sensor_status[*result + 2]);
		} else {
			*result = type_value;
			pr_info("FP_SET_SENSOR_TYPE :%s\n", *result > 0 ?
					sensor_status[3] : sensor_status[*result + 2]);
		}
	} else {
		pr_err("FP_SET_SENSOR_TYPE invalid value %d\n", type_value);
		*result = SENSOR_UNKNOWN;
	}
}

void enable_fp_debug_timer(struct debug_logger *logger)
{
	mod_timer(&logger->dbg_timer, round_jiffies_up(jiffies + DEBUG_TIMER_SEC));
}

void disable_fp_debug_timer(struct debug_logger *logger)
{
	del_timer_sync(&logger->dbg_timer);
	cancel_work_sync(&logger->work_debug);
}

#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 14, 0)
void timer_func(unsigned long ptr)
#else
void timer_func(struct timer_list *t)
#endif
{
	queue_work(g_logger->wq_dbg, &g_logger->work_debug);
	enable_fp_debug_timer(g_logger);
}

int set_fp_debug_timer(struct debug_logger *logger,
					void (*func)(struct work_struct *work))
{
	int rc = 0;
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 14, 0)
	setup_timer(&logger->dbg_timer, timer_func, 0);
#else
	timer_setup(&logger->dbg_timer, timer_func, 0);
#endif
	logger->wq_dbg = create_singlethread_workqueue("fingerprint_debug_wq");
	if (!logger->wq_dbg) {
		rc = -ENOMEM;
		pr_err("could not create workqueue\n");
		return rc;
	}
	INIT_WORK(&logger->work_debug, func);

	return rc;
}

void set_delay_in_spi_transfer(struct spi_transfer *xfer, unsigned int usec)
{
#if LINUX_VERSION_CODE > KERNEL_VERSION(5, 10, 0)
	xfer->delay.unit = SPI_DELAY_UNIT_USECS;
	xfer->delay.value = usec;
#else
	xfer->delay_usecs = usec;
#endif
}