thermal/drivers/int340x: processor_thermal: Export additional attributes
authorSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Mon, 17 May 2021 06:14:41 +0000 (23:14 -0700)
committerDaniel Lezcano <daniel.lezcano@linaro.org>
Fri, 11 Jun 2021 09:55:47 +0000 (11:55 +0200)
Export additional attributes:

ddr_data_rate (RO) : Show current DDR (Double Data Rate) data rate.
rfi_restriction (RW) : Show or set current state for RFI (Radio
Frequency Interference) protection.

These attributes use mailbox commands to get/set information. Here
command codes are:
0x0007: Read RFI restriction
0x0107: Read DDR data rate
0x0008: Write RFI restriction

Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Link: https://lore.kernel.org/r/20210517061441.1921901-3-srinivas.pandruvada@linux.intel.com
drivers/thermal/intel/int340x_thermal/processor_thermal_rfim.c

index aef993a813e2828f628c43e526d2012278e8be79..2b8a3235d518ba7ce3841103d22acc8c7520dcba 100644 (file)
@@ -190,6 +190,59 @@ static DEVICE_ATTR_RO(ddr_data_rate_point_2);
 static DEVICE_ATTR_RO(ddr_data_rate_point_3);
 static DEVICE_ATTR_RW(rfi_disable);
 
+static ssize_t rfi_restriction_store(struct device *dev,
+                                    struct device_attribute *attr,
+                                    const char *buf, size_t count)
+{
+       u16 cmd_id = 0x0008;
+       u32 cmd_resp;
+       u32 input;
+       int ret;
+
+       ret = kstrtou32(buf, 10, &input);
+       if (ret)
+               return ret;
+
+       ret = processor_thermal_send_mbox_cmd(to_pci_dev(dev), cmd_id, input, &cmd_resp);
+       if (ret)
+               return ret;
+
+       return count;
+}
+
+static ssize_t rfi_restriction_show(struct device *dev,
+                                   struct device_attribute *attr,
+                                   char *buf)
+{
+       u16 cmd_id = 0x0007;
+       u32 cmd_resp;
+       int ret;
+
+       ret = processor_thermal_send_mbox_cmd(to_pci_dev(dev), cmd_id, 0, &cmd_resp);
+       if (ret)
+               return ret;
+
+       return sprintf(buf, "%u\n", cmd_resp);
+}
+
+static ssize_t ddr_data_rate_show(struct device *dev,
+                                 struct device_attribute *attr,
+                                 char *buf)
+{
+       u16 cmd_id = 0x0107;
+       u32 cmd_resp;
+       int ret;
+
+       ret = processor_thermal_send_mbox_cmd(to_pci_dev(dev), cmd_id, 0, &cmd_resp);
+       if (ret)
+               return ret;
+
+       return sprintf(buf, "%u\n", cmd_resp);
+}
+
+static DEVICE_ATTR_RW(rfi_restriction);
+static DEVICE_ATTR_RO(ddr_data_rate);
+
 static struct attribute *dvfs_attrs[] = {
        &dev_attr_rfi_restriction_run_busy.attr,
        &dev_attr_rfi_restriction_err_code.attr,
@@ -199,6 +252,8 @@ static struct attribute *dvfs_attrs[] = {
        &dev_attr_ddr_data_rate_point_2.attr,
        &dev_attr_ddr_data_rate_point_3.attr,
        &dev_attr_rfi_disable.attr,
+       &dev_attr_ddr_data_rate.attr,
+       &dev_attr_rfi_restriction.attr,
        NULL
 };