blob: 39f0a342016b9cb0cd6dfa5e747a14e240130ad9 [file] [log] [blame]
/* abc_hub.h
*
* Abnormal Behavior Catcher Hub Driver
*
* Copyright (C) 2017 Samsung Electronics
*
* Sangsu Ha <sangsu.ha@samsung.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#ifndef SEC_ABC_HUB_H
#define SEC_ABC_HUB_H
#include <linux/sti/abc_common.h>
/******************************************/
/****************** Data ******************/
/******************************************/
/*********** sub module : cond ************/
#ifdef CONFIG_SEC_ABC_HUB_COND
#define DET_CONN_MAX_NUM_GPIOS 32
struct sub_cond_pdata {
// common
int init;
int enabled;
// custom
const char *name[DET_CONN_MAX_NUM_GPIOS];
int irq_gpio[DET_CONN_MAX_NUM_GPIOS];
int irq_number[DET_CONN_MAX_NUM_GPIOS];
unsigned int irq_type[DET_CONN_MAX_NUM_GPIOS];
int gpio_cnt;
struct mutex cond_lock;
};
#endif
/*********** sub module : bootc ************/
#ifdef CONFIG_SEC_ABC_HUB_BOOTC
#define BOOTC_OFFSET_DATA_CNT 1
#define BOOTC_OFFSET_STR_MAX 100
struct abc_hub_bootc_offset_data {
char module[BOOTC_OFFSET_STR_MAX];
int offset;
};
struct sub_bootc_pdata {
// common
int init;
int enabled;
// custom
int time_spec;
int time_spec_offset;
struct abc_hub_bootc_offset_data offset_data[BOOTC_OFFSET_DATA_CNT];
struct workqueue_struct *workqueue;
struct delayed_work bootc_work;
};
#endif
/****************** Common *****************/
/* It will be added if sub module is added. */
enum {
ABC_HUB_DISABLED,
ABC_HUB_ENABLED,
};
struct abc_hub_platform_data {
unsigned int nSub;
#ifdef CONFIG_SEC_ABC_HUB_COND
struct sub_cond_pdata cond_pdata;
#endif
#ifdef CONFIG_SEC_ABC_HUB_BOOTC
struct sub_bootc_pdata bootc_pdata;
#endif
};
struct abc_hub_info {
struct device *dev;
struct abc_hub_platform_data *pdata;
int enabled;
};
/******************************************/
/**************** Function ****************/
/******************************************/
/*********** sub module : cond ************/
#ifdef CONFIG_SEC_ABC_HUB_COND
int parse_cond_data(struct device *dev,
struct abc_hub_platform_data *pdata,
struct device_node *np);
int abc_hub_cond_init(struct device *dev);
void abc_hub_cond_enable(struct device *dev, int enable);
int abc_hub_cond_suspend(struct device *dev);
int abc_hub_cond_resume(struct device *dev);
#endif
/*********** sub module : bootc ************/
#ifdef CONFIG_SEC_ABC_HUB_BOOTC
int parse_bootc_data(struct device *dev,
struct abc_hub_platform_data *pdata,
struct device_node *np);
int abc_hub_bootc_init(struct device *dev);
void abc_hub_bootc_enable(struct device *dev, int enable);
#endif
/****************** Common *****************/
void abc_hub_send_event(char *str);
int abc_hub_get_enabled(void);
#endif