Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux
[linux-3.10.git] / drivers / gpu / drm / radeon / radeon_atombios.c
index c4b5d05..f22eb57 100644 (file)
@@ -1254,6 +1254,10 @@ bool radeon_atom_get_clock_info(struct drm_device *dev)
                if (rdev->clock.max_pixel_clock == 0)
                        rdev->clock.max_pixel_clock = 40000;
 
+               /* not technically a clock, but... */
+               rdev->mode_info.firmware_flags =
+                       le16_to_cpu(firmware_info->info.usFirmwareCapability.susAccess);
+
                return true;
        }
 
@@ -2005,7 +2009,8 @@ static int radeon_atombios_parse_power_table_1_3(struct radeon_device *rdev)
        power_info = (union power_info *)(mode_info->atom_context->bios + data_offset);
 
        /* add the i2c bus for thermal/fan chip */
-       if (power_info->info.ucOverdriveThermalController > 0) {
+       if ((power_info->info.ucOverdriveThermalController > 0) &&
+           (power_info->info.ucOverdriveThermalController < ARRAY_SIZE(thermal_controller_names))) {
                DRM_INFO("Possible %s thermal controller at 0x%02x\n",
                         thermal_controller_names[power_info->info.ucOverdriveThermalController],
                         power_info->info.ucOverdriveControllerAddress >> 1);
@@ -2209,7 +2214,7 @@ static void radeon_atombios_add_pplib_thermal_controller(struct radeon_device *r
                           (controller->ucType ==
                            ATOM_PP_THERMALCONTROLLER_EMC2103_WITH_INTERNAL)) {
                        DRM_INFO("Special thermal controller config\n");
-               } else {
+               } else if (controller->ucType < ARRAY_SIZE(pp_lib_thermal_controller_names)) {
                        DRM_INFO("Possible %s thermal controller at 0x%02x %s fan control\n",
                                 pp_lib_thermal_controller_names[controller->ucType],
                                 controller->ucI2cAddress >> 1,
@@ -2224,6 +2229,12 @@ static void radeon_atombios_add_pplib_thermal_controller(struct radeon_device *r
                                strlcpy(info.type, name, sizeof(info.type));
                                i2c_new_device(&rdev->pm.i2c_bus->adapter, &info);
                        }
+               } else {
+                       DRM_INFO("Unknown thermal controller type %d at 0x%02x %s fan control\n",
+                                controller->ucType,
+                                controller->ucI2cAddress >> 1,
+                                (controller->ucFanParameters &
+                                 ATOM_PP_FANPARAMETERS_NOFAN) ? "without" : "with");
                }
        }
 }