--- a/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h +++ b/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h @@ -531,7 +531,11 @@ struct iwl_mvm_tt_mgmt { * @tzone: thermal zone device data */ struct iwl_mvm_thermal_device { +#if LINUX_VERSION_IS_LESS(6,6,0) s16 temp_trips[IWL_MAX_DTS_TRIPS]; +#else + struct thermal_trip trips[IWL_MAX_DTS_TRIPS]; +#endif u8 fw_trips_index[IWL_MAX_DTS_TRIPS]; struct thermal_zone_device *tzone; }; --- a/drivers/net/wireless/intel/iwlwifi/mvm/tt.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/tt.c @@ -573,6 +573,7 @@ int iwl_mvm_send_temp_report_ths_cmd(str * and uncompressed, the FW should get it compressed and sorted */ +#if LINUX_VERSION_IS_LESS(6,6,0) /* compress temp_trips to cmd array, remove uninitialized values*/ for (i = 0; i < IWL_MAX_DTS_TRIPS; i++) { if (mvm->tz_device.temp_trips[i] != S16_MIN) { @@ -580,6 +581,15 @@ int iwl_mvm_send_temp_report_ths_cmd(str cpu_to_le16(mvm->tz_device.temp_trips[i]); } } +#else + /* compress trips to cmd array, remove uninitialized values*/ + for (i = 0; i < IWL_MAX_DTS_TRIPS; i++) { + if (mvm->tz_device.trips[i].temperature != INT_MIN) { + cmd.thresholds[idx++] = + cpu_to_le16((s16)(mvm->tz_device.trips[i].temperature / 1000)); + } + } +#endif cmd.num_temps = cpu_to_le32(idx); if (!idx) @@ -593,8 +603,13 @@ int iwl_mvm_send_temp_report_ths_cmd(str */ for (i = 0; i < idx; i++) { for (j = 0; j < IWL_MAX_DTS_TRIPS; j++) { +#if LINUX_VERSION_IS_LESS(6,6,0) if (le16_to_cpu(cmd.thresholds[i]) == mvm->tz_device.temp_trips[j]) +#else + if ((int)(le16_to_cpu(cmd.thresholds[i]) * 1000) == + mvm->tz_device.trips[j].temperature) +#endif mvm->tz_device.fw_trips_index[i] = j; } } @@ -638,6 +653,7 @@ out: return ret; } +#if LINUX_VERSION_IS_LESS(6,6,0) static int iwl_mvm_tzone_get_trip_temp(struct thermal_zone_device *device, int trip, int *temp) { @@ -661,14 +677,19 @@ static int iwl_mvm_tzone_get_trip_type(s return 0; } +#endif static int iwl_mvm_tzone_set_trip_temp(struct thermal_zone_device *device, int trip, int temp) { struct iwl_mvm *mvm = thermal_zone_device_priv(device); struct iwl_mvm_thermal_device *tzone; +#if LINUX_VERSION_IS_LESS(6,6,0) int i, ret; s16 temperature; +#else + int ret; +#endif mutex_lock(&mvm->mutex); @@ -678,17 +699,21 @@ static int iwl_mvm_tzone_set_trip_temp(s goto out; } +#if LINUX_VERSION_IS_LESS(6,6,0) if (trip < 0 || trip >= IWL_MAX_DTS_TRIPS) { ret = -EINVAL; goto out; } +#endif if ((temp / 1000) > S16_MAX) { ret = -EINVAL; goto out; } +#if LINUX_VERSION_IS_LESS(6,6,0) temperature = (s16)(temp / 1000); +#endif tzone = &mvm->tz_device; if (!tzone) { @@ -696,6 +721,7 @@ static int iwl_mvm_tzone_set_trip_temp(s goto out; } +#if LINUX_VERSION_IS_LESS(6,6,0) /* no updates*/ if (tzone->temp_trips[trip] == temperature) { ret = 0; @@ -711,6 +737,7 @@ static int iwl_mvm_tzone_set_trip_temp(s } tzone->temp_trips[trip] = temperature; +#endif ret = iwl_mvm_send_temp_report_ths_cmd(mvm); out: @@ -720,8 +747,10 @@ out: static struct thermal_zone_device_ops tzone_ops = { .get_temp = iwl_mvm_tzone_get_temp, +#if LINUX_VERSION_IS_LESS(6,6,0) .get_trip_temp = iwl_mvm_tzone_get_trip_temp, .get_trip_type = iwl_mvm_tzone_get_trip_type, +#endif .set_trip_temp = iwl_mvm_tzone_set_trip_temp, }; @@ -743,7 +772,12 @@ static void iwl_mvm_thermal_zone_registe BUILD_BUG_ON(ARRAY_SIZE(name) >= THERMAL_NAME_LENGTH); sprintf(name, "iwlwifi_%u", atomic_inc_return(&counter) & 0xFF); +#if LINUX_VERSION_IS_LESS(6,6,0) mvm->tz_device.tzone = thermal_zone_device_register(name, +#else + mvm->tz_device.tzone = thermal_zone_device_register_with_trips(name, + mvm->tz_device.trips, +#endif IWL_MAX_DTS_TRIPS, IWL_WRITABLE_TRIPS_MSK, mvm, &tzone_ops, @@ -766,8 +800,15 @@ static void iwl_mvm_thermal_zone_registe /* 0 is a valid temperature, * so initialize the array with S16_MIN which invalid temperature */ +#if LINUX_VERSION_IS_LESS(6,6,0) for (i = 0 ; i < IWL_MAX_DTS_TRIPS; i++) mvm->tz_device.temp_trips[i] = S16_MIN; +#else + for (i = 0 ; i < IWL_MAX_DTS_TRIPS; i++) { + mvm->tz_device.trips[i].temperature = INT_MIN; + mvm->tz_device.trips[i].type = THERMAL_TRIP_PASSIVE; + } +#endif } static int iwl_mvm_tcool_get_max_state(struct thermal_cooling_device *cdev,