1*8879cff7SMikko Perttunen /* SPDX-License-Identifier: GPL-2.0 */ 2*8879cff7SMikko Perttunen 3*8879cff7SMikko Perttunen #ifndef TEGRA_EMC_COMMON_H 4*8879cff7SMikko Perttunen #define TEGRA_EMC_COMMON_H 5*8879cff7SMikko Perttunen 6*8879cff7SMikko Perttunen #include <linux/device.h> 7*8879cff7SMikko Perttunen #include <linux/mutex.h> 8*8879cff7SMikko Perttunen 9*8879cff7SMikko Perttunen /** 10*8879cff7SMikko Perttunen * enum tegra_emc_rate_request_type - source of rate request 11*8879cff7SMikko Perttunen * @TEGRA_EMC_RATE_DEVFREQ: rate requested by devfreq governor 12*8879cff7SMikko Perttunen * @TEGRA_EMC_RATE_DEBUG: rate requested through debugfs knobs 13*8879cff7SMikko Perttunen * @TEGRA_EMC_RATE_ICC: rate requested by ICC framework 14*8879cff7SMikko Perttunen * @TEGRA_EMC_RATE_TYPE_MAX: number of valid request types 15*8879cff7SMikko Perttunen */ 16*8879cff7SMikko Perttunen enum tegra_emc_rate_request_type { 17*8879cff7SMikko Perttunen TEGRA_EMC_RATE_DEVFREQ, 18*8879cff7SMikko Perttunen TEGRA_EMC_RATE_DEBUG, 19*8879cff7SMikko Perttunen TEGRA_EMC_RATE_ICC, 20*8879cff7SMikko Perttunen TEGRA_EMC_RATE_TYPE_MAX, 21*8879cff7SMikko Perttunen }; 22*8879cff7SMikko Perttunen 23*8879cff7SMikko Perttunen struct tegra_emc_rate_request { 24*8879cff7SMikko Perttunen unsigned long min_rate; 25*8879cff7SMikko Perttunen unsigned long max_rate; 26*8879cff7SMikko Perttunen }; 27*8879cff7SMikko Perttunen 28*8879cff7SMikko Perttunen struct tegra_emc_rate_requests { 29*8879cff7SMikko Perttunen struct tegra_emc_rate_request requested_rate[TEGRA_EMC_RATE_TYPE_MAX]; 30*8879cff7SMikko Perttunen /* Protects @requested_rate. */ 31*8879cff7SMikko Perttunen struct mutex rate_lock; 32*8879cff7SMikko Perttunen struct device *dev; 33*8879cff7SMikko Perttunen }; 34*8879cff7SMikko Perttunen 35*8879cff7SMikko Perttunen void tegra_emc_rate_requests_init(struct tegra_emc_rate_requests *reqs, 36*8879cff7SMikko Perttunen struct device *dev); 37*8879cff7SMikko Perttunen 38*8879cff7SMikko Perttunen int tegra_emc_set_min_rate(struct tegra_emc_rate_requests *reqs, 39*8879cff7SMikko Perttunen unsigned long rate, 40*8879cff7SMikko Perttunen enum tegra_emc_rate_request_type type); 41*8879cff7SMikko Perttunen 42*8879cff7SMikko Perttunen int tegra_emc_set_max_rate(struct tegra_emc_rate_requests *reqs, 43*8879cff7SMikko Perttunen unsigned long rate, 44*8879cff7SMikko Perttunen enum tegra_emc_rate_request_type type); 45*8879cff7SMikko Perttunen 46*8879cff7SMikko Perttunen #endif /* TEGRA_EMC_COMMON_H */ 47