thermal: tsens: Pass register offsets as private data
Registers have moved around across TSENS generations. For example, the CTRL register was at offset 0x0 in the SROT region on msm8916 but is at offset 0x4 in newer v2 based TSENS HW blocks. Allow passing offsets of important registers so that we can continue to use common functions. Signed-off-by: Amit Kucheria <amit.kucheria@linaro.org> Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org> Signed-off-by: Eduardo Valentin <edubezval@gmail.com>
This commit is contained in:
Родитель
a15525b5d9
Коммит
c130a7602e
|
@ -100,5 +100,6 @@ static const struct tsens_ops ops_8916 = {
|
|||
const struct tsens_data data_8916 = {
|
||||
.num_sensors = 5,
|
||||
.ops = &ops_8916,
|
||||
.reg_offsets = { [SROT_CTRL_OFFSET] = 0x0 },
|
||||
.hw_ids = (unsigned int []){0, 1, 2, 4, 5 },
|
||||
};
|
||||
|
|
|
@ -232,4 +232,5 @@ static const struct tsens_ops ops_8974 = {
|
|||
const struct tsens_data data_8974 = {
|
||||
.num_sensors = 11,
|
||||
.ops = &ops_8974,
|
||||
.reg_offsets = { [SROT_CTRL_OFFSET] = 0x0 },
|
||||
};
|
||||
|
|
|
@ -68,10 +68,12 @@ static const struct tsens_ops ops_generic_v2 = {
|
|||
|
||||
const struct tsens_data data_tsens_v2 = {
|
||||
.ops = &ops_generic_v2,
|
||||
.reg_offsets = { [SROT_CTRL_OFFSET] = 0x4 },
|
||||
};
|
||||
|
||||
/* Kept around for backward compatibility with old msm8996.dtsi */
|
||||
const struct tsens_data data_8996 = {
|
||||
.num_sensors = 13,
|
||||
.ops = &ops_generic_v2,
|
||||
.reg_offsets = { [SROT_CTRL_OFFSET] = 0x4 },
|
||||
};
|
||||
|
|
|
@ -144,6 +144,9 @@ static int tsens_probe(struct platform_device *pdev)
|
|||
else
|
||||
tmdev->sensor[i].hw_id = i;
|
||||
}
|
||||
for (i = 0; i < REG_ARRAY_SIZE; i++) {
|
||||
tmdev->reg_offsets[i] = data->reg_offsets[i];
|
||||
}
|
||||
|
||||
if (!tmdev->ops || !tmdev->ops->init || !tmdev->ops->get_temp)
|
||||
return -EINVAL;
|
||||
|
|
|
@ -48,15 +48,23 @@ struct tsens_ops {
|
|||
int (*get_trend)(struct tsens_device *, int, enum thermal_trend *);
|
||||
};
|
||||
|
||||
enum reg_list {
|
||||
SROT_CTRL_OFFSET,
|
||||
|
||||
REG_ARRAY_SIZE,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct tsens_data - tsens instance specific data
|
||||
* @num_sensors: Max number of sensors supported by platform
|
||||
* @ops: operations the tsens instance supports
|
||||
* @hw_ids: Subset of sensors ids supported by platform, if not the first n
|
||||
* @reg_offsets: Register offsets for commonly used registers
|
||||
*/
|
||||
struct tsens_data {
|
||||
const u32 num_sensors;
|
||||
const struct tsens_ops *ops;
|
||||
const u16 reg_offsets[REG_ARRAY_SIZE];
|
||||
unsigned int *hw_ids;
|
||||
};
|
||||
|
||||
|
@ -72,6 +80,7 @@ struct tsens_device {
|
|||
struct regmap *tm_map;
|
||||
struct regmap *srot_map;
|
||||
u32 tm_offset;
|
||||
u16 reg_offsets[REG_ARRAY_SIZE];
|
||||
struct tsens_context ctx;
|
||||
const struct tsens_ops *ops;
|
||||
struct tsens_sensor sensor[0];
|
||||
|
|
Загрузка…
Ссылка в новой задаче