ec/kontron/it8516e: Add option for external temperature sensor

The IT8516E firmware of Kontron supports some selected external sensors
attached to the EC via SMBUS or GPIO16.

Change-Id: I4c451c360a393e916430e3bea04a95847455cef7
Signed-off-by: Nico Huber <nico.huber@secunet.com>
Reviewed-on: http://review.coreboot.org/3772
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Tested-by: build bot (Jenkins)
Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
This commit is contained in:
Nico Huber 2013-07-12 14:35:00 +02:00 committed by Stefan Reinauer
parent 933b5df6a8
commit 6d6a2ac055
3 changed files with 33 additions and 3 deletions

View File

@ -26,10 +26,14 @@
struct ec_kontron_it8516e_config { struct ec_kontron_it8516e_config {
/* /*
* Per fan settings * Fan settings (fan1: CPU; fan2: System)
* Can be overwritten by fan1_mode, fan2_mode, fan1_target * Can be overwritten by
* and fan2_target options * systemp_type,
* fan1_mode, fan2_mode,
* fan1_target, and fan2_target
* nvram options.
*/ */
enum it8516e_systemp_types default_systemp;
enum it8516e_fan_modes default_fan_mode[2]; enum it8516e_fan_modes default_fan_mode[2];
u16 default_fan_target[2]; /* PWM: % / Speed: RPM / Thermal: °C */ u16 default_fan_target[2]; /* PWM: % / Speed: RPM / Thermal: °C */
}; };

View File

@ -30,6 +30,8 @@
typedef struct ec_kontron_it8516e_config config_t; typedef struct ec_kontron_it8516e_config config_t;
enum { /* EC commands */ enum { /* EC commands */
IT8516E_CMD_SET_SYSTEMP_TYPE = 0x06,
IT8516E_CMD_GET_SYSTEMP_TYPE = 0x07,
IT8516E_CMD_GET_FAN_MODE = 0x10, IT8516E_CMD_GET_FAN_MODE = 0x10,
IT8516E_CMD_SET_FAN_MODE = 0x11, IT8516E_CMD_SET_FAN_MODE = 0x11,
IT8516E_CMD_GET_FAN_PWM = 0x12, IT8516E_CMD_GET_FAN_PWM = 0x12,
@ -40,6 +42,13 @@ enum { /* EC commands */
IT8516E_CMD_SET_FAN_TEMP = 0x17, IT8516E_CMD_SET_FAN_TEMP = 0x17,
}; };
static void it8516e_set_systemp_type(const u8 type)
{
if (send_ec_command(IT8516E_CMD_SET_SYSTEMP_TYPE))
return;
send_ec_data(type);
}
static void it8516e_set_fan_mode(const u8 idx, const u8 mode) static void it8516e_set_fan_mode(const u8 idx, const u8 mode)
{ {
if (send_ec_command(IT8516E_CMD_SET_FAN_MODE)) if (send_ec_command(IT8516E_CMD_SET_FAN_MODE))
@ -138,6 +147,12 @@ static void it8516e_pm2_init(const device_t dev)
ec_set_ports(find_resource(dev, PNP_IDX_IO1)->base, ec_set_ports(find_resource(dev, PNP_IDX_IO1)->base,
find_resource(dev, PNP_IDX_IO0)->base); find_resource(dev, PNP_IDX_IO0)->base);
u8 systemp_type = config->default_systemp;
get_option(&systemp_type, "systemp_type");
if (systemp_type >= IT8516E_SYSTEMP_LASTPLUSONE)
systemp_type = IT8516E_SYSTEMP_NONE;
it8516e_set_systemp_type(systemp_type);
it8516e_set_fan_from_options(config, 0); it8516e_set_fan_from_options(config, 0);
it8516e_set_fan_from_options(config, 1); it8516e_set_fan_from_options(config, 1);
} }

View File

@ -40,4 +40,15 @@ enum it8516e_fan_modes { /* Possible modes of fan control */
IT8516E_MODE_THERMAL = 0x03, IT8516E_MODE_THERMAL = 0x03,
}; };
enum it8516e_systemp_types { /* Possible sources of system temperature */
IT8516E_SYSTEMP_NONE = 0x00,
IT8516E_SYSTEMP_AMD = 0x01,
IT8516E_SYSTEMP_LM75_90 = 0x02,
IT8516E_SYSTEMP_GPIO16 = 0x03,
IT8516E_SYSTEMP_LM75_9e = 0x04,
/* add any new types above this line. */
IT8516E_SYSTEMP_LASTPLUSONE,
};
#endif #endif