/* sec_nadbalancer.h * * NAD Balancer Driver * * Copyright (C) 2017 Samsung Electronics * * Hyeokseon Yu * * 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_NAD_BALANCER_H #define SEC_NAD_BALANCER_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if defined(CONFIG_SEC_FACTORY) #define BALANCER_CMD 5 #define NAD_BUFF_SIZE 256 #define MAX_TMU_COUNT 4 #define UPDATE_FIRST_TEMPERATURE 1 #define UPDATE_CONTI_TEMPERATURE 2 #define UPDATE_FINAL_TEMPERATURE 3 #define NAD_MIN_FREQ 0 #define NAD_MAX_FREQ 1 struct device *sec_nad_balancer; static bool nad_balancer_enable; static bool sleep_test_enable; static DEFINE_MUTEX(nad_balancer_lock); struct freq_table { unsigned int freq; }; struct nad_balancer_pm_qos { const char *desc; struct task_struct *thread; struct freq_table *tables; int delay_time; int table_size; int policy; struct pm_qos_request big_qos; struct pm_qos_request lit_qos; struct pm_qos_request mif_qos; struct pm_qos_request int_qos; int temperature[MAX_TMU_COUNT]; }; struct nad_balancer_sleep_info { int suspend_threshold; int resume_threshold; }; struct nad_balancer_platform_data { struct nad_balancer_pm_qos *qos_items; struct nad_balancer_sleep_info *sleep_items; unsigned int nItem; unsigned int nQos; unsigned int timeout; unsigned int nSleep; }; struct nad_balancer_info { struct device *dev; struct nad_balancer_platform_data *pdata; struct delayed_work sec_nad_balancer_work; }; static int sec_nad_balancer_probe(struct platform_device *pdev); static int sec_nad_balancer_resume(struct device *dev); static int sec_nad_balancer_remove(struct platform_device *pdev); static int sec_nad_balancer_prepare(struct device *dev); #define UPDATE_PM_QOS(req, class_id, arg) ({ \ if (arg) { \ if (pm_qos_request_active(req)) \ pm_qos_update_request(req, arg); \ else \ pm_qos_add_request(req, class_id, arg); \ } \ }) #define REMOVE_PM_QOS(req) ({ \ if (pm_qos_request_active(req)) \ pm_qos_remove_request(req); \ }) #endif #endif