brintos

brintos / linux-shallow public Read only

0
0
Text · 25.2 KiB · 2c2205a Raw
1030 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2/*3 * lm75.c - Part of lm_sensors, Linux kernel modules for hardware4 *	 monitoring5 * Copyright (c) 1998, 1999  Frodo Looijaard <frodol@dds.nl>6 */7 8#include <linux/module.h>9#include <linux/init.h>10#include <linux/interrupt.h>11#include <linux/slab.h>12#include <linux/jiffies.h>13#include <linux/i2c.h>14#include <linux/hwmon.h>15#include <linux/err.h>16#include <linux/of.h>17#include <linux/regmap.h>18#include <linux/util_macros.h>19#include <linux/regulator/consumer.h>20#include "lm75.h"21 22/*23 * This driver handles the LM75 and compatible digital temperature sensors.24 */25 26enum lm75_type {		/* keep sorted in alphabetical order */27	adt75,28	as6200,29	at30ts74,30	ds1775,31	ds75,32	ds7505,33	g751,34	lm75,35	lm75a,36	lm75b,37	max6625,38	max6626,39	max31725,40	mcp980x,41	pct2075,42	stds75,43	stlm75,44	tcn75,45	tmp100,46	tmp101,47	tmp105,48	tmp112,49	tmp175,50	tmp275,51	tmp75,52	tmp75b,53	tmp75c,54	tmp1075,55};56 57/**58 * struct lm75_params - lm75 configuration parameters.59 * @config_reg_16bits:	Configure register size is 2 bytes.60 * @set_mask:		Bits to set in configuration register when configuring61 *			the chip.62 * @clr_mask:		Bits to clear in configuration register when configuring63 *			the chip.64 * @default_resolution:	Default number of bits to represent the temperature65 *			value.66 * @resolution_limits:	Limit register resolution. Optional. Should be set if67 *			the resolution of limit registers does not match the68 *			resolution of the temperature register.69 * @resolutions:	List of resolutions associated with sample times.70 *			Optional. Should be set if num_sample_times is larger71 *			than 1, and if the resolution changes with sample times.72 *			If set, number of entries must match num_sample_times.73 * @default_sample_time:Sample time to be set by default.74 * @num_sample_times:	Number of possible sample times to be set. Optional.75 *			Should be set if the number of sample times is larger76 *			than one.77 * @sample_times:	All the possible sample times to be set. Mandatory if78 *			num_sample_times is larger than 1. If set, number of79 *			entries must match num_sample_times.80 * @alarm:		Alarm bit is supported.81 */82 83struct lm75_params {84	bool			config_reg_16bits;85	u16			set_mask;86	u16			clr_mask;87	u8			default_resolution;88	u8			resolution_limits;89	const u8		*resolutions;90	unsigned int		default_sample_time;91	u8			num_sample_times;92	const unsigned int	*sample_times;93	bool			alarm;94};95 96/* Addresses scanned */97static const unsigned short normal_i2c[] = { 0x48, 0x49, 0x4a, 0x4b, 0x4c,98					0x4d, 0x4e, 0x4f, I2C_CLIENT_END };99 100/* The LM75 registers */101#define LM75_REG_TEMP		0x00102#define LM75_REG_CONF		0x01103#define LM75_REG_HYST		0x02104#define LM75_REG_MAX		0x03105#define PCT2075_REG_IDLE	0x04106 107/* Each client has this additional data */108struct lm75_data {109	struct i2c_client		*client;110	struct regmap			*regmap;111	struct regulator		*vs;112	u16				orig_conf;113	u16				current_conf;114	u8				resolution;	/* In bits, 9 to 16 */115	unsigned int			sample_time;	/* In ms */116	enum lm75_type			kind;117	const struct lm75_params	*params;118};119 120/*-----------------------------------------------------------------------*/121 122static const u8 lm75_sample_set_masks[] = { 0 << 5, 1 << 5, 2 << 5, 3 << 5 };123 124#define LM75_SAMPLE_CLEAR_MASK	(3 << 5)125 126/* The structure below stores the configuration values of the supported devices.127 * In case of being supported multiple configurations, the default one must128 * always be the first element of the array129 */130static const struct lm75_params device_params[] = {131	[adt75] = {132		.clr_mask = 1 << 5,	/* not one-shot mode */133		.default_resolution = 12,134		.default_sample_time = MSEC_PER_SEC / 10,135	},136	[as6200] = {137		.config_reg_16bits = true,138		.set_mask = 0x94C0,	/* 8 sample/s, 4 CF, positive polarity */139		.default_resolution = 12,140		.default_sample_time = 125,141		.num_sample_times = 4,142		.sample_times = (unsigned int []){ 125, 250, 1000, 4000 },143		.alarm = true,144	},145	[at30ts74] = {146		.set_mask = 3 << 5,	/* 12-bit mode*/147		.default_resolution = 12,148		.default_sample_time = 200,149		.num_sample_times = 4,150		.sample_times = (unsigned int []){ 25, 50, 100, 200 },151		.resolutions = (u8 []) {9, 10, 11, 12 },152	},153	[ds1775] = {154		.clr_mask = 3 << 5,155		.set_mask = 2 << 5,	/* 11-bit mode */156		.default_resolution = 11,157		.default_sample_time = 500,158		.num_sample_times = 4,159		.sample_times = (unsigned int []){ 125, 250, 500, 1000 },160		.resolutions = (u8 []) {9, 10, 11, 12 },161	},162	[ds75] = {163		.clr_mask = 3 << 5,164		.set_mask = 2 << 5,	/* 11-bit mode */165		.default_resolution = 11,166		.default_sample_time = 600,167		.num_sample_times = 4,168		.sample_times = (unsigned int []){ 150, 300, 600, 1200 },169		.resolutions = (u8 []) {9, 10, 11, 12 },170	},171	[stds75] = {172		.clr_mask = 3 << 5,173		.set_mask = 2 << 5,	/* 11-bit mode */174		.default_resolution = 11,175		.default_sample_time = 600,176		.num_sample_times = 4,177		.sample_times = (unsigned int []){ 150, 300, 600, 1200 },178		.resolutions = (u8 []) {9, 10, 11, 12 },179	},180	[stlm75] = {181		.default_resolution = 9,182		.default_sample_time = MSEC_PER_SEC / 6,183	},184	[ds7505] = {185		.set_mask = 3 << 5,	/* 12-bit mode*/186		.default_resolution = 12,187		.default_sample_time = 200,188		.num_sample_times = 4,189		.sample_times = (unsigned int []){ 25, 50, 100, 200 },190		.resolutions = (u8 []) {9, 10, 11, 12 },191	},192	[g751] = {193		.default_resolution = 9,194		.default_sample_time = MSEC_PER_SEC / 10,195	},196	[lm75] = {197		.default_resolution = 9,198		.default_sample_time = MSEC_PER_SEC / 10,199	},200	[lm75a] = {201		.default_resolution = 9,202		.default_sample_time = MSEC_PER_SEC / 10,203	},204	[lm75b] = {205		.default_resolution = 11,206		.default_sample_time = MSEC_PER_SEC / 10,207	},208	[max6625] = {209		.default_resolution = 9,210		.default_sample_time = MSEC_PER_SEC / 7,211	},212	[max6626] = {213		.default_resolution = 12,214		.default_sample_time = MSEC_PER_SEC / 7,215		.resolution_limits = 9,216	},217	[max31725] = {218		.default_resolution = 16,219		.default_sample_time = MSEC_PER_SEC / 20,220	},221	[tcn75] = {222		.default_resolution = 9,223		.default_sample_time = MSEC_PER_SEC / 18,224	},225	[pct2075] = {226		.default_resolution = 11,227		.default_sample_time = MSEC_PER_SEC / 10,228		.num_sample_times = 31,229		.sample_times = (unsigned int []){ 100, 200, 300, 400, 500, 600,230		700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700,231		1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700,232		2800, 2900, 3000, 3100 },233	},234	[mcp980x] = {235		.set_mask = 3 << 5,	/* 12-bit mode */236		.clr_mask = 1 << 7,	/* not one-shot mode */237		.default_resolution = 12,238		.resolution_limits = 9,239		.default_sample_time = 240,240		.num_sample_times = 4,241		.sample_times = (unsigned int []){ 30, 60, 120, 240 },242		.resolutions = (u8 []) {9, 10, 11, 12 },243	},244	[tmp100] = {245		.set_mask = 3 << 5,	/* 12-bit mode */246		.clr_mask = 1 << 7,	/* not one-shot mode */247		.default_resolution = 12,248		.default_sample_time = 320,249		.num_sample_times = 4,250		.sample_times = (unsigned int []){ 40, 80, 160, 320 },251		.resolutions = (u8 []) {9, 10, 11, 12 },252	},253	[tmp101] = {254		.set_mask = 3 << 5,	/* 12-bit mode */255		.clr_mask = 1 << 7,	/* not one-shot mode */256		.default_resolution = 12,257		.default_sample_time = 320,258		.num_sample_times = 4,259		.sample_times = (unsigned int []){ 40, 80, 160, 320 },260		.resolutions = (u8 []) {9, 10, 11, 12 },261	},262	[tmp105] = {263		.set_mask = 3 << 5,	/* 12-bit mode */264		.clr_mask = 1 << 7,	/* not one-shot mode*/265		.default_resolution = 12,266		.default_sample_time = 220,267		.num_sample_times = 4,268		.sample_times = (unsigned int []){ 28, 55, 110, 220 },269		.resolutions = (u8 []) {9, 10, 11, 12 },270	},271	[tmp112] = {272		.config_reg_16bits = true,273		.set_mask = 0x60C0,	/* 12-bit mode, 8 samples / second */274		.clr_mask = 1 << 15,	/* no one-shot mode*/275		.default_resolution = 12,276		.default_sample_time = 125,277		.num_sample_times = 4,278		.sample_times = (unsigned int []){ 125, 250, 1000, 4000 },279	},280	[tmp175] = {281		.set_mask = 3 << 5,	/* 12-bit mode */282		.clr_mask = 1 << 7,	/* not one-shot mode*/283		.default_resolution = 12,284		.default_sample_time = 220,285		.num_sample_times = 4,286		.sample_times = (unsigned int []){ 28, 55, 110, 220 },287		.resolutions = (u8 []) {9, 10, 11, 12 },288	},289	[tmp275] = {290		.set_mask = 3 << 5,	/* 12-bit mode */291		.clr_mask = 1 << 7,	/* not one-shot mode*/292		.default_resolution = 12,293		.default_sample_time = 220,294		.num_sample_times = 4,295		.sample_times = (unsigned int []){ 28, 55, 110, 220 },296		.resolutions = (u8 []) {9, 10, 11, 12 },297	},298	[tmp75] = {299		.set_mask = 3 << 5,	/* 12-bit mode */300		.clr_mask = 1 << 7,	/* not one-shot mode*/301		.default_resolution = 12,302		.default_sample_time = 220,303		.num_sample_times = 4,304		.sample_times = (unsigned int []){ 28, 55, 110, 220 },305		.resolutions = (u8 []) {9, 10, 11, 12 },306	},307	[tmp75b] = { /* not one-shot mode, Conversion rate 37Hz */308		.clr_mask = 1 << 7 | 3 << 5,309		.default_resolution = 12,310		.default_sample_time = MSEC_PER_SEC / 37,311		.sample_times = (unsigned int []){ MSEC_PER_SEC / 37,312			MSEC_PER_SEC / 18,313			MSEC_PER_SEC / 9, MSEC_PER_SEC / 4 },314		.num_sample_times = 4,315	},316	[tmp75c] = {317		.clr_mask = 1 << 5,	/*not one-shot mode*/318		.default_resolution = 12,319		.default_sample_time = MSEC_PER_SEC / 12,320	},321	[tmp1075] = { /* not one-shot mode, 27.5 ms sample rate */322		.clr_mask = 1 << 5 | 1 << 6 | 1 << 7,323		.default_resolution = 12,324		.default_sample_time = 28,325		.num_sample_times = 4,326		.sample_times = (unsigned int []){ 28, 55, 110, 220 },327	}328};329 330static inline long lm75_reg_to_mc(s16 temp, u8 resolution)331{332	return ((temp >> (16 - resolution)) * 1000) >> (resolution - 8);333}334 335static int lm75_write_config(struct lm75_data *data, u16 set_mask,336			     u16 clr_mask)337{338	unsigned int value;339 340	clr_mask |= LM75_SHUTDOWN << (8 * data->params->config_reg_16bits);341	value = data->current_conf & ~clr_mask;342	value |= set_mask;343 344	if (data->current_conf != value) {345		s32 err;346		if (data->params->config_reg_16bits)347			err = regmap_write(data->regmap, LM75_REG_CONF, value);348		else349			err = i2c_smbus_write_byte_data(data->client,350							LM75_REG_CONF,351							value);352		if (err)353			return err;354		data->current_conf = value;355	}356	return 0;357}358 359static int lm75_read_config(struct lm75_data *data)360{361	int ret;362	unsigned int status;363 364	if (data->params->config_reg_16bits) {365		ret = regmap_read(data->regmap, LM75_REG_CONF, &status);366		return ret ? ret : status;367	}368 369	return i2c_smbus_read_byte_data(data->client, LM75_REG_CONF);370}371 372static irqreturn_t lm75_alarm_handler(int irq, void *private)373{374	struct device *hwmon_dev = private;375 376	hwmon_notify_event(hwmon_dev, hwmon_temp, hwmon_temp_alarm, 0);377	return IRQ_HANDLED;378}379 380static int lm75_read(struct device *dev, enum hwmon_sensor_types type,381		     u32 attr, int channel, long *val)382{383	struct lm75_data *data = dev_get_drvdata(dev);384	unsigned int regval;385	int err, reg;386 387	switch (type) {388	case hwmon_chip:389		switch (attr) {390		case hwmon_chip_update_interval:391			*val = data->sample_time;392			break;393		default:394			return -EINVAL;395		}396		break;397	case hwmon_temp:398		switch (attr) {399		case hwmon_temp_input:400			reg = LM75_REG_TEMP;401			break;402		case hwmon_temp_max:403			reg = LM75_REG_MAX;404			break;405		case hwmon_temp_max_hyst:406			reg = LM75_REG_HYST;407			break;408		case hwmon_temp_alarm:409			reg = LM75_REG_CONF;410			break;411		default:412			return -EINVAL;413		}414		err = regmap_read(data->regmap, reg, &regval);415		if (err < 0)416			return err;417 418		if (attr == hwmon_temp_alarm) {419			switch (data->kind) {420			case as6200:421				*val = (regval >> 5) & 0x1;422				break;423			default:424				return -EINVAL;425			}426		} else {427			*val = lm75_reg_to_mc(regval, data->resolution);428		}429		break;430	default:431		return -EINVAL;432	}433	return 0;434}435 436static int lm75_write_temp(struct device *dev, u32 attr, long temp)437{438	struct lm75_data *data = dev_get_drvdata(dev);439	u8 resolution;440	int reg;441 442	switch (attr) {443	case hwmon_temp_max:444		reg = LM75_REG_MAX;445		break;446	case hwmon_temp_max_hyst:447		reg = LM75_REG_HYST;448		break;449	default:450		return -EINVAL;451	}452 453	/*454	 * Resolution of limit registers is assumed to be the same as the455	 * temperature input register resolution unless given explicitly.456	 */457	if (data->params->resolution_limits)458		resolution = data->params->resolution_limits;459	else460		resolution = data->resolution;461 462	temp = clamp_val(temp, LM75_TEMP_MIN, LM75_TEMP_MAX);463	temp = DIV_ROUND_CLOSEST(temp  << (resolution - 8),464				 1000) << (16 - resolution);465 466	return regmap_write(data->regmap, reg, (u16)temp);467}468 469static int lm75_update_interval(struct device *dev, long val)470{471	struct lm75_data *data = dev_get_drvdata(dev);472	unsigned int reg;473	u8 index;474	s32 err;475 476	index = find_closest(val, data->params->sample_times,477			     (int)data->params->num_sample_times);478 479	switch (data->kind) {480	default:481		err = lm75_write_config(data, lm75_sample_set_masks[index],482					LM75_SAMPLE_CLEAR_MASK);483		if (err)484			return err;485 486		data->sample_time = data->params->sample_times[index];487		if (data->params->resolutions)488			data->resolution = data->params->resolutions[index];489		break;490	case tmp112:491	case as6200:492		err = regmap_read(data->regmap, LM75_REG_CONF, &reg);493		if (err < 0)494			return err;495		reg &= ~0x00c0;496		reg |= (3 - index) << 6;497		err = regmap_write(data->regmap, LM75_REG_CONF, reg);498		if (err < 0)499			return err;500		data->sample_time = data->params->sample_times[index];501		break;502	case pct2075:503		err = i2c_smbus_write_byte_data(data->client, PCT2075_REG_IDLE,504						index + 1);505		if (err)506			return err;507		data->sample_time = data->params->sample_times[index];508		break;509	}510	return 0;511}512 513static int lm75_write_chip(struct device *dev, u32 attr, long val)514{515	switch (attr) {516	case hwmon_chip_update_interval:517		return lm75_update_interval(dev, val);518	default:519		return -EINVAL;520	}521	return 0;522}523 524static int lm75_write(struct device *dev, enum hwmon_sensor_types type,525		      u32 attr, int channel, long val)526{527	switch (type) {528	case hwmon_chip:529		return lm75_write_chip(dev, attr, val);530	case hwmon_temp:531		return lm75_write_temp(dev, attr, val);532	default:533		return -EINVAL;534	}535	return 0;536}537 538static umode_t lm75_is_visible(const void *data, enum hwmon_sensor_types type,539			       u32 attr, int channel)540{541	const struct lm75_data *config_data = data;542 543	switch (type) {544	case hwmon_chip:545		switch (attr) {546		case hwmon_chip_update_interval:547			if (config_data->params->num_sample_times > 1)548				return 0644;549			return 0444;550		}551		break;552	case hwmon_temp:553		switch (attr) {554		case hwmon_temp_input:555			return 0444;556		case hwmon_temp_max:557		case hwmon_temp_max_hyst:558			return 0644;559		case hwmon_temp_alarm:560			if (config_data->params->alarm)561				return 0444;562			break;563		}564		break;565	default:566		break;567	}568	return 0;569}570 571static const struct hwmon_channel_info * const lm75_info[] = {572	HWMON_CHANNEL_INFO(chip,573			   HWMON_C_REGISTER_TZ | HWMON_C_UPDATE_INTERVAL),574	HWMON_CHANNEL_INFO(temp,575			   HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_MAX_HYST |576			   HWMON_T_ALARM),577	NULL578};579 580static const struct hwmon_ops lm75_hwmon_ops = {581	.is_visible = lm75_is_visible,582	.read = lm75_read,583	.write = lm75_write,584};585 586static const struct hwmon_chip_info lm75_chip_info = {587	.ops = &lm75_hwmon_ops,588	.info = lm75_info,589};590 591static bool lm75_is_writeable_reg(struct device *dev, unsigned int reg)592{593	return reg != LM75_REG_TEMP;594}595 596static bool lm75_is_volatile_reg(struct device *dev, unsigned int reg)597{598	return reg == LM75_REG_TEMP || reg == LM75_REG_CONF;599}600 601static const struct regmap_config lm75_regmap_config = {602	.reg_bits = 8,603	.val_bits = 16,604	.max_register = PCT2075_REG_IDLE,605	.writeable_reg = lm75_is_writeable_reg,606	.volatile_reg = lm75_is_volatile_reg,607	.val_format_endian = REGMAP_ENDIAN_BIG,608	.cache_type = REGCACHE_MAPLE,609	.use_single_read = true,610	.use_single_write = true,611};612 613static void lm75_disable_regulator(void *data)614{615	struct lm75_data *lm75 = data;616 617	regulator_disable(lm75->vs);618}619 620static void lm75_remove(void *data)621{622	struct lm75_data *lm75 = data;623	struct i2c_client *client = lm75->client;624 625	i2c_smbus_write_byte_data(client, LM75_REG_CONF, lm75->orig_conf);626}627 628static int lm75_probe(struct i2c_client *client)629{630	struct device *dev = &client->dev;631	struct device *hwmon_dev;632	struct lm75_data *data;633	int status, err;634 635	if (!i2c_check_functionality(client->adapter,636			I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA))637		return -EIO;638 639	data = devm_kzalloc(dev, sizeof(struct lm75_data), GFP_KERNEL);640	if (!data)641		return -ENOMEM;642 643	data->client = client;644	data->kind = (uintptr_t)i2c_get_match_data(client);645 646	data->vs = devm_regulator_get(dev, "vs");647	if (IS_ERR(data->vs))648		return PTR_ERR(data->vs);649 650	data->regmap = devm_regmap_init_i2c(client, &lm75_regmap_config);651	if (IS_ERR(data->regmap))652		return PTR_ERR(data->regmap);653 654	/* Set to LM75 resolution (9 bits, 1/2 degree C) and range.655	 * Then tweak to be more precise when appropriate.656	 */657 658	data->params = &device_params[data->kind];659 660	/* Save default sample time and resolution*/661	data->sample_time = data->params->default_sample_time;662	data->resolution = data->params->default_resolution;663 664	/* Enable the power */665	err = regulator_enable(data->vs);666	if (err) {667		dev_err(dev, "failed to enable regulator: %d\n", err);668		return err;669	}670 671	err = devm_add_action_or_reset(dev, lm75_disable_regulator, data);672	if (err)673		return err;674 675	/* Cache original configuration */676	status = lm75_read_config(data);677	if (status < 0) {678		dev_dbg(dev, "Can't read config? %d\n", status);679		return status;680	}681	data->orig_conf = status;682	data->current_conf = status;683 684	err = lm75_write_config(data, data->params->set_mask,685				data->params->clr_mask);686	if (err)687		return err;688 689	err = devm_add_action_or_reset(dev, lm75_remove, data);690	if (err)691		return err;692 693	hwmon_dev = devm_hwmon_device_register_with_info(dev, client->name,694							 data, &lm75_chip_info,695							 NULL);696	if (IS_ERR(hwmon_dev))697		return PTR_ERR(hwmon_dev);698 699	if (client->irq) {700		if (data->params->alarm) {701			err = devm_request_threaded_irq(dev,702							client->irq,703							NULL,704							&lm75_alarm_handler,705							IRQF_ONESHOT,706							client->name,707							hwmon_dev);708			if (err)709				return err;710		} else {711			 /* alarm is only supported for chips with alarm bit */712			dev_err(dev, "alarm interrupt is not supported\n");713		}714	}715 716	dev_info(dev, "%s: sensor '%s'\n", dev_name(hwmon_dev), client->name);717 718	return 0;719}720 721static const struct i2c_device_id lm75_ids[] = {722	{ "adt75", adt75, },723	{ "as6200", as6200, },724	{ "at30ts74", at30ts74, },725	{ "ds1775", ds1775, },726	{ "ds75", ds75, },727	{ "ds7505", ds7505, },728	{ "g751", g751, },729	{ "lm75", lm75, },730	{ "lm75a", lm75a, },731	{ "lm75b", lm75b, },732	{ "max6625", max6625, },733	{ "max6626", max6626, },734	{ "max31725", max31725, },735	{ "max31726", max31725, },736	{ "mcp980x", mcp980x, },737	{ "pct2075", pct2075, },738	{ "stds75", stds75, },739	{ "stlm75", stlm75, },740	{ "tcn75", tcn75, },741	{ "tmp100", tmp100, },742	{ "tmp101", tmp101, },743	{ "tmp105", tmp105, },744	{ "tmp112", tmp112, },745	{ "tmp175", tmp175, },746	{ "tmp275", tmp275, },747	{ "tmp75", tmp75, },748	{ "tmp75b", tmp75b, },749	{ "tmp75c", tmp75c, },750	{ "tmp1075", tmp1075, },751	{ /* LIST END */ }752};753MODULE_DEVICE_TABLE(i2c, lm75_ids);754 755static const struct of_device_id __maybe_unused lm75_of_match[] = {756	{757		.compatible = "adi,adt75",758		.data = (void *)adt75759	},760	{761		.compatible = "ams,as6200",762		.data = (void *)as6200763	},764	{765		.compatible = "atmel,at30ts74",766		.data = (void *)at30ts74767	},768	{769		.compatible = "dallas,ds1775",770		.data = (void *)ds1775771	},772	{773		.compatible = "dallas,ds75",774		.data = (void *)ds75775	},776	{777		.compatible = "dallas,ds7505",778		.data = (void *)ds7505779	},780	{781		.compatible = "gmt,g751",782		.data = (void *)g751783	},784	{785		.compatible = "national,lm75",786		.data = (void *)lm75787	},788	{789		.compatible = "national,lm75a",790		.data = (void *)lm75a791	},792	{793		.compatible = "national,lm75b",794		.data = (void *)lm75b795	},796	{797		.compatible = "maxim,max6625",798		.data = (void *)max6625799	},800	{801		.compatible = "maxim,max6626",802		.data = (void *)max6626803	},804	{805		.compatible = "maxim,max31725",806		.data = (void *)max31725807	},808	{809		.compatible = "maxim,max31726",810		.data = (void *)max31725811	},812	{813		.compatible = "maxim,mcp980x",814		.data = (void *)mcp980x815	},816	{817		.compatible = "nxp,pct2075",818		.data = (void *)pct2075819	},820	{821		.compatible = "st,stds75",822		.data = (void *)stds75823	},824	{825		.compatible = "st,stlm75",826		.data = (void *)stlm75827	},828	{829		.compatible = "microchip,tcn75",830		.data = (void *)tcn75831	},832	{833		.compatible = "ti,tmp100",834		.data = (void *)tmp100835	},836	{837		.compatible = "ti,tmp101",838		.data = (void *)tmp101839	},840	{841		.compatible = "ti,tmp105",842		.data = (void *)tmp105843	},844	{845		.compatible = "ti,tmp112",846		.data = (void *)tmp112847	},848	{849		.compatible = "ti,tmp175",850		.data = (void *)tmp175851	},852	{853		.compatible = "ti,tmp275",854		.data = (void *)tmp275855	},856	{857		.compatible = "ti,tmp75",858		.data = (void *)tmp75859	},860	{861		.compatible = "ti,tmp75b",862		.data = (void *)tmp75b863	},864	{865		.compatible = "ti,tmp75c",866		.data = (void *)tmp75c867	},868	{869		.compatible = "ti,tmp1075",870		.data = (void *)tmp1075871	},872	{ },873};874MODULE_DEVICE_TABLE(of, lm75_of_match);875 876#define LM75A_ID 0xA1877 878/* Return 0 if detection is successful, -ENODEV otherwise */879static int lm75_detect(struct i2c_client *new_client,880		       struct i2c_board_info *info)881{882	struct i2c_adapter *adapter = new_client->adapter;883	int i;884	int conf, hyst, os;885	bool is_lm75a = 0;886 887	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA |888				     I2C_FUNC_SMBUS_WORD_DATA))889		return -ENODEV;890 891	/*892	 * Now, we do the remaining detection. There is no identification-893	 * dedicated register so we have to rely on several tricks:894	 * unused bits, registers cycling over 8-address boundaries,895	 * addresses 0x04-0x07 returning the last read value.896	 * The cycling+unused addresses combination is not tested,897	 * since it would significantly slow the detection down and would898	 * hardly add any value.899	 *900	 * The National Semiconductor LM75A is different than earlier901	 * LM75s.  It has an ID byte of 0xaX (where X is the chip902	 * revision, with 1 being the only revision in existence) in903	 * register 7, and unused registers return 0xff rather than the904	 * last read value.905	 *906	 * Note that this function only detects the original National907	 * Semiconductor LM75 and the LM75A. Clones from other vendors908	 * aren't detected, on purpose, because they are typically never909	 * found on PC hardware. They are found on embedded designs where910	 * they can be instantiated explicitly so detection is not needed.911	 * The absence of identification registers on all these clones912	 * would make their exhaustive detection very difficult and weak,913	 * and odds are that the driver would bind to unsupported devices.914	 */915 916	/* Unused bits */917	conf = i2c_smbus_read_byte_data(new_client, 1);918	if (conf & 0xe0)919		return -ENODEV;920 921	/* First check for LM75A */922	if (i2c_smbus_read_byte_data(new_client, 7) == LM75A_ID) {923		/*924		 * LM75A returns 0xff on unused registers so925		 * just to be sure we check for that too.926		 */927		if (i2c_smbus_read_byte_data(new_client, 4) != 0xff928		 || i2c_smbus_read_byte_data(new_client, 5) != 0xff929		 || i2c_smbus_read_byte_data(new_client, 6) != 0xff)930			return -ENODEV;931		is_lm75a = 1;932		hyst = i2c_smbus_read_byte_data(new_client, 2);933		os = i2c_smbus_read_byte_data(new_client, 3);934	} else { /* Traditional style LM75 detection */935		/* Unused addresses */936		hyst = i2c_smbus_read_byte_data(new_client, 2);937		if (i2c_smbus_read_byte_data(new_client, 4) != hyst938		 || i2c_smbus_read_byte_data(new_client, 5) != hyst939		 || i2c_smbus_read_byte_data(new_client, 6) != hyst940		 || i2c_smbus_read_byte_data(new_client, 7) != hyst)941			return -ENODEV;942		os = i2c_smbus_read_byte_data(new_client, 3);943		if (i2c_smbus_read_byte_data(new_client, 4) != os944		 || i2c_smbus_read_byte_data(new_client, 5) != os945		 || i2c_smbus_read_byte_data(new_client, 6) != os946		 || i2c_smbus_read_byte_data(new_client, 7) != os)947			return -ENODEV;948	}949	/*950	 * It is very unlikely that this is a LM75 if both951	 * hysteresis and temperature limit registers are 0.952	 */953	if (hyst == 0 && os == 0)954		return -ENODEV;955 956	/* Addresses cycling */957	for (i = 8; i <= 248; i += 40) {958		if (i2c_smbus_read_byte_data(new_client, i + 1) != conf959		 || i2c_smbus_read_byte_data(new_client, i + 2) != hyst960		 || i2c_smbus_read_byte_data(new_client, i + 3) != os)961			return -ENODEV;962		if (is_lm75a && i2c_smbus_read_byte_data(new_client, i + 7)963				!= LM75A_ID)964			return -ENODEV;965	}966 967	strscpy(info->type, is_lm75a ? "lm75a" : "lm75", I2C_NAME_SIZE);968 969	return 0;970}971 972#ifdef CONFIG_PM973static int lm75_suspend(struct device *dev)974{975	int status;976	struct i2c_client *client = to_i2c_client(dev);977 978	status = i2c_smbus_read_byte_data(client, LM75_REG_CONF);979	if (status < 0) {980		dev_dbg(&client->dev, "Can't read config? %d\n", status);981		return status;982	}983	status = status | LM75_SHUTDOWN;984	i2c_smbus_write_byte_data(client, LM75_REG_CONF, status);985	return 0;986}987 988static int lm75_resume(struct device *dev)989{990	int status;991	struct i2c_client *client = to_i2c_client(dev);992 993	status = i2c_smbus_read_byte_data(client, LM75_REG_CONF);994	if (status < 0) {995		dev_dbg(&client->dev, "Can't read config? %d\n", status);996		return status;997	}998	status = status & ~LM75_SHUTDOWN;999	i2c_smbus_write_byte_data(client, LM75_REG_CONF, status);1000	return 0;1001}1002 1003static const struct dev_pm_ops lm75_dev_pm_ops = {1004	.suspend	= lm75_suspend,1005	.resume		= lm75_resume,1006};1007#define LM75_DEV_PM_OPS (&lm75_dev_pm_ops)1008#else1009#define LM75_DEV_PM_OPS NULL1010#endif /* CONFIG_PM */1011 1012static struct i2c_driver lm75_driver = {1013	.class		= I2C_CLASS_HWMON,1014	.driver = {1015		.name	= "lm75",1016		.of_match_table = of_match_ptr(lm75_of_match),1017		.pm	= LM75_DEV_PM_OPS,1018	},1019	.probe		= lm75_probe,1020	.id_table	= lm75_ids,1021	.detect		= lm75_detect,1022	.address_list	= normal_i2c,1023};1024 1025module_i2c_driver(lm75_driver);1026 1027MODULE_AUTHOR("Frodo Looijaard <frodol@dds.nl>");1028MODULE_DESCRIPTION("LM75 driver");1029MODULE_LICENSE("GPL");1030