Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
a85f1c6a
Commit
a85f1c6a
authored
Jun 08, 2004
by
Greg Kroah-Hartman
Browse files
Options
Browse Files
Download
Plain Diff
Merge kroah.com:/home/greg/linux/BK/bleed-2.6
into kroah.com:/home/greg/linux/BK/i2c-2.6
parents
056d7d3a
41ea291a
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
126 additions
and
30 deletions
+126
-30
drivers/i2c/busses/i2c-piix4.c
drivers/i2c/busses/i2c-piix4.c
+1
-1
drivers/i2c/chips/it87.c
drivers/i2c/chips/it87.c
+22
-26
drivers/i2c/chips/w83627hf.c
drivers/i2c/chips/w83627hf.c
+91
-3
include/linux/i2c-id.h
include/linux/i2c-id.h
+12
-0
No files found.
drivers/i2c/busses/i2c-piix4.c
View file @
a85f1c6a
...
...
@@ -138,7 +138,7 @@ static int __devinit piix4_setup(struct pci_dev *PIIX4_dev,
dev_info
(
&
PIIX4_dev
->
dev
,
"Found %s device
\n
"
,
pci_name
(
PIIX4_dev
));
if
(
ibm_dmi_probe
())
{
if
(
ibm_dmi_probe
()
&&
PIIX4_dev
->
vendor
==
PCI_VENDOR_ID_INTEL
)
{
dev_err
(
&
PIIX4_dev
->
dev
,
"IBM Laptop detected; this module "
"may corrupt your serial eeprom! Refusing to load "
"module!
\n
"
);
...
...
drivers/i2c/chips/it87.c
View file @
a85f1c6a
...
...
@@ -128,15 +128,15 @@ static int reset;
#define IT87_REG_FAN(nr) (0x0d + (nr))
#define IT87_REG_FAN_MIN(nr) (0x10 + (nr))
#define IT87_REG_FAN_
CTRL
0x13
#define IT87_REG_FAN_
MAIN_CTRL
0x13
#define IT87_REG_VIN(nr) (0x20 + (nr))
#define IT87_REG_TEMP(nr) (0x29 + (nr))
#define IT87_REG_VIN_MAX(nr) (0x30 + (nr) * 2)
#define IT87_REG_VIN_MIN(nr) (0x31 + (nr) * 2)
#define IT87_REG_TEMP_HIGH(nr) (0x40 + (
(nr) * 2)
)
#define IT87_REG_TEMP_LOW(nr) (0x41 + (
(nr) * 2)
)
#define IT87_REG_TEMP_HIGH(nr) (0x40 + (
nr) * 2
)
#define IT87_REG_TEMP_LOW(nr) (0x41 + (
nr) * 2
)
#define IT87_REG_I2C_ADDR 0x48
...
...
@@ -145,8 +145,8 @@ static int reset;
#define IT87_REG_CHIPID 0x58
#define IN_TO_REG(val) (SENSORS_LIMIT((((val)
* 10
+ 8)/16),0,255))
#define IN_FROM_REG(val) ((
(val) * 16) / 10
)
#define IN_TO_REG(val) (SENSORS_LIMIT((((val) + 8)/16),0,255))
#define IN_FROM_REG(val) ((
val) * 16
)
static
inline
u8
FAN_TO_REG
(
long
rpm
,
int
div
)
{
...
...
@@ -159,9 +159,9 @@ static inline u8 FAN_TO_REG(long rpm, int div)
#define FAN_FROM_REG(val,div) ((val)==0?-1:(val)==255?0:1350000/((val)*(div)))
#define TEMP_TO_REG(val) (SENSORS_LIMIT(((val)<0?(((val)-5
)/1
0):\
((val)+5
)/10),0,255
))
#define TEMP_FROM_REG(val) (((val)>0x80?(val)-0x100:(val))*10)
#define TEMP_TO_REG(val) (SENSORS_LIMIT(((val)<0?(((val)-5
00)/100
0):\
((val)+5
00)/1000),-128,127
))
#define TEMP_FROM_REG(val) (((val)>0x80?(val)-0x100:(val))*10
00
)
#define VID_FROM_REG(val) ((val)==0x1f?0:(val)>=0x10?510-(val)*10:\
205-(val)*5)
...
...
@@ -231,19 +231,19 @@ static int it87_id = 0;
static
ssize_t
show_in
(
struct
device
*
dev
,
char
*
buf
,
int
nr
)
{
struct
it87_data
*
data
=
it87_update_device
(
dev
);
return
sprintf
(
buf
,
"%d
\n
"
,
IN_FROM_REG
(
data
->
in
[
nr
])
*
10
);
return
sprintf
(
buf
,
"%d
\n
"
,
IN_FROM_REG
(
data
->
in
[
nr
]));
}
static
ssize_t
show_in_min
(
struct
device
*
dev
,
char
*
buf
,
int
nr
)
{
struct
it87_data
*
data
=
it87_update_device
(
dev
);
return
sprintf
(
buf
,
"%d
\n
"
,
IN_FROM_REG
(
data
->
in_min
[
nr
])
*
10
);
return
sprintf
(
buf
,
"%d
\n
"
,
IN_FROM_REG
(
data
->
in_min
[
nr
]));
}
static
ssize_t
show_in_max
(
struct
device
*
dev
,
char
*
buf
,
int
nr
)
{
struct
it87_data
*
data
=
it87_update_device
(
dev
);
return
sprintf
(
buf
,
"%d
\n
"
,
IN_FROM_REG
(
data
->
in_max
[
nr
])
*
10
);
return
sprintf
(
buf
,
"%d
\n
"
,
IN_FROM_REG
(
data
->
in_max
[
nr
]));
}
static
ssize_t
set_in_min
(
struct
device
*
dev
,
const
char
*
buf
,
...
...
@@ -251,7 +251,7 @@ static ssize_t set_in_min(struct device *dev, const char *buf,
{
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
it87_data
*
data
=
i2c_get_clientdata
(
client
);
unsigned
long
val
=
simple_strtoul
(
buf
,
NULL
,
10
)
/
10
;
unsigned
long
val
=
simple_strtoul
(
buf
,
NULL
,
10
);
data
->
in_min
[
nr
]
=
IN_TO_REG
(
val
);
it87_write_value
(
client
,
IT87_REG_VIN_MIN
(
nr
),
data
->
in_min
[
nr
]);
...
...
@@ -262,7 +262,7 @@ static ssize_t set_in_max(struct device *dev, const char *buf,
{
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
it87_data
*
data
=
i2c_get_clientdata
(
client
);
unsigned
long
val
=
simple_strtoul
(
buf
,
NULL
,
10
)
/
10
;
unsigned
long
val
=
simple_strtoul
(
buf
,
NULL
,
10
);
data
->
in_max
[
nr
]
=
IN_TO_REG
(
val
);
it87_write_value
(
client
,
IT87_REG_VIN_MAX
(
nr
),
data
->
in_max
[
nr
]);
...
...
@@ -325,24 +325,24 @@ show_in_offset(8);
static
ssize_t
show_temp
(
struct
device
*
dev
,
char
*
buf
,
int
nr
)
{
struct
it87_data
*
data
=
it87_update_device
(
dev
);
return
sprintf
(
buf
,
"%d
\n
"
,
TEMP_FROM_REG
(
data
->
temp
[
nr
])
*
100
);
return
sprintf
(
buf
,
"%d
\n
"
,
TEMP_FROM_REG
(
data
->
temp
[
nr
]));
}
static
ssize_t
show_temp_max
(
struct
device
*
dev
,
char
*
buf
,
int
nr
)
{
struct
it87_data
*
data
=
it87_update_device
(
dev
);
return
sprintf
(
buf
,
"%d
\n
"
,
TEMP_FROM_REG
(
data
->
temp_high
[
nr
])
*
100
);
return
sprintf
(
buf
,
"%d
\n
"
,
TEMP_FROM_REG
(
data
->
temp_high
[
nr
]));
}
static
ssize_t
show_temp_min
(
struct
device
*
dev
,
char
*
buf
,
int
nr
)
{
struct
it87_data
*
data
=
it87_update_device
(
dev
);
return
sprintf
(
buf
,
"%d
\n
"
,
TEMP_FROM_REG
(
data
->
temp_low
[
nr
])
*
100
);
return
sprintf
(
buf
,
"%d
\n
"
,
TEMP_FROM_REG
(
data
->
temp_low
[
nr
]));
}
static
ssize_t
set_temp_max
(
struct
device
*
dev
,
const
char
*
buf
,
size_t
count
,
int
nr
)
{
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
it87_data
*
data
=
i2c_get_clientdata
(
client
);
int
val
=
simple_strtol
(
buf
,
NULL
,
10
)
/
100
;
int
val
=
simple_strtol
(
buf
,
NULL
,
10
);
data
->
temp_high
[
nr
]
=
TEMP_TO_REG
(
val
);
it87_write_value
(
client
,
IT87_REG_TEMP_HIGH
(
nr
),
data
->
temp_high
[
nr
]);
return
count
;
...
...
@@ -352,7 +352,7 @@ static ssize_t set_temp_min(struct device *dev, const char *buf,
{
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
it87_data
*
data
=
i2c_get_clientdata
(
client
);
int
val
=
simple_strtol
(
buf
,
NULL
,
10
)
/
100
;
int
val
=
simple_strtol
(
buf
,
NULL
,
10
);
data
->
temp_low
[
nr
]
=
TEMP_TO_REG
(
val
);
it87_write_value
(
client
,
IT87_REG_TEMP_LOW
(
nr
),
data
->
temp_low
[
nr
]);
return
count
;
...
...
@@ -773,9 +773,7 @@ static int it87_detach_client(struct i2c_client *client)
We don't want to lock the whole ISA bus, so we lock each client
separately.
We ignore the IT87 BUSY flag at this moment - it could lead to deadlocks,
would slow down the IT87 access and should not be necessary.
There are some ugly typecasts here, but the good new is - they should
nowhere else be necessary! */
would slow down the IT87 access and should not be necessary. */
static
int
it87_read_value
(
struct
i2c_client
*
client
,
u8
reg
)
{
struct
it87_data
*
data
=
i2c_get_clientdata
(
client
);
...
...
@@ -795,9 +793,7 @@ static int it87_read_value(struct i2c_client *client, u8 reg)
We don't want to lock the whole ISA bus, so we lock each client
separately.
We ignore the IT87 BUSY flag at this moment - it could lead to deadlocks,
would slow down the IT87 access and should not be necessary.
There are some ugly typecasts here, but the good new is - they should
nowhere else be necessary! */
would slow down the IT87 access and should not be necessary. */
static
int
it87_write_value
(
struct
i2c_client
*
client
,
u8
reg
,
u8
value
)
{
struct
it87_data
*
data
=
i2c_get_clientdata
(
client
);
...
...
@@ -840,11 +836,11 @@ static void it87_init_client(struct i2c_client *client, struct it87_data *data)
}
/* Check if tachometers are reset manually or by some reason */
tmp
=
it87_read_value
(
client
,
IT87_REG_FAN_CTRL
);
tmp
=
it87_read_value
(
client
,
IT87_REG_FAN_
MAIN_
CTRL
);
if
((
tmp
&
0x70
)
==
0
)
{
/* Enable all fan tachometers */
tmp
=
(
tmp
&
0x8f
)
|
0x70
;
it87_write_value
(
client
,
IT87_REG_FAN_CTRL
,
tmp
);
it87_write_value
(
client
,
IT87_REG_FAN_
MAIN_
CTRL
,
tmp
);
}
/* Start monitoring */
...
...
drivers/i2c/chips/w83627hf.c
View file @
a85f1c6a
...
...
@@ -199,7 +199,7 @@ superio_exit(void)
#define W83627THF_REG_PWM2 0x03
/* 697HF and 637HF too */
#define W83627THF_REG_PWM3 0x11
/* 637HF too */
#define W83627THF_REG_VRM_OVT_CFG 0x18
/* 637HF too
, unused yet
*/
#define W83627THF_REG_VRM_OVT_CFG 0x18
/* 637HF too */
static
const
u8
regpwm_627hf
[]
=
{
W83627HF_REG_PWM1
,
W83627HF_REG_PWM2
};
static
const
u8
regpwm
[]
=
{
W83627THF_REG_PWM1
,
W83627THF_REG_PWM2
,
...
...
@@ -222,7 +222,7 @@ static const u8 BIT_SCFG2[] = { 0x10, 0x20, 0x40 };
these macros are called: arguments may be evaluated more than once.
Fixing this is just not worth it. */
#define IN_TO_REG(val) (SENSORS_LIMIT((((val) + 8)/16),0,255))
#define IN_FROM_REG(val) ((val) * 16
+ 5
)
#define IN_FROM_REG(val) ((val) * 16)
static
inline
u8
FAN_TO_REG
(
long
rpm
,
int
div
)
{
...
...
@@ -312,6 +312,7 @@ struct w83627hf_data {
Default = 3435.
Other Betas unimplemented */
u8
vrm
;
u8
vrm_ovt
;
/* Register value, 627thf & 637hf only */
};
...
...
@@ -391,7 +392,6 @@ sysfs_in_offset(offset) \
sysfs_in_reg_offset(min, offset) \
sysfs_in_reg_offset(max, offset)
sysfs_in_offsets
(
0
)
sysfs_in_offsets
(
1
)
sysfs_in_offsets
(
2
)
sysfs_in_offsets
(
3
)
...
...
@@ -401,6 +401,89 @@ sysfs_in_offsets(6)
sysfs_in_offsets
(
7
)
sysfs_in_offsets
(
8
)
/* use a different set of functions for in0 */
static
ssize_t
show_in_0
(
struct
w83627hf_data
*
data
,
char
*
buf
,
u8
reg
)
{
long
in0
;
if
((
data
->
vrm_ovt
&
0x01
)
&&
(
w83627thf
==
data
->
type
||
w83637hf
==
data
->
type
))
/* use VRM9 calculation */
in0
=
(
long
)((
reg
*
488
+
70000
+
50
)
/
100
);
else
/* use VRM8 (standard) calculation */
in0
=
(
long
)
IN_FROM_REG
(
reg
);
return
sprintf
(
buf
,
"%ld
\n
"
,
in0
);
}
static
ssize_t
show_regs_in_0
(
struct
device
*
dev
,
char
*
buf
)
{
struct
w83627hf_data
*
data
=
w83627hf_update_device
(
dev
);
return
show_in_0
(
data
,
buf
,
data
->
in
[
0
]);
}
static
ssize_t
show_regs_in_min0
(
struct
device
*
dev
,
char
*
buf
)
{
struct
w83627hf_data
*
data
=
w83627hf_update_device
(
dev
);
return
show_in_0
(
data
,
buf
,
data
->
in_min
[
0
]);
}
static
ssize_t
show_regs_in_max0
(
struct
device
*
dev
,
char
*
buf
)
{
struct
w83627hf_data
*
data
=
w83627hf_update_device
(
dev
);
return
show_in_0
(
data
,
buf
,
data
->
in_max
[
0
]);
}
static
ssize_t
store_regs_in_min0
(
struct
device
*
dev
,
const
char
*
buf
,
size_t
count
)
{
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
w83627hf_data
*
data
=
i2c_get_clientdata
(
client
);
u32
val
;
val
=
simple_strtoul
(
buf
,
NULL
,
10
);
if
((
data
->
vrm_ovt
&
0x01
)
&&
(
w83627thf
==
data
->
type
||
w83637hf
==
data
->
type
))
/* use VRM9 calculation */
data
->
in_min
[
0
]
=
(
u8
)(((
val
*
100
)
-
70000
+
244
)
/
488
);
else
/* use VRM8 (standard) calculation */
data
->
in_min
[
0
]
=
IN_TO_REG
(
val
);
w83627hf_write_value
(
client
,
W83781D_REG_IN_MIN
(
0
),
data
->
in_min
[
0
]);
return
count
;
}
static
ssize_t
store_regs_in_max0
(
struct
device
*
dev
,
const
char
*
buf
,
size_t
count
)
{
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
w83627hf_data
*
data
=
i2c_get_clientdata
(
client
);
u32
val
;
val
=
simple_strtoul
(
buf
,
NULL
,
10
);
if
((
data
->
vrm_ovt
&
0x01
)
&&
(
w83627thf
==
data
->
type
||
w83637hf
==
data
->
type
))
/* use VRM9 calculation */
data
->
in_max
[
0
]
=
(
u8
)(((
val
*
100
)
-
70000
+
244
)
/
488
);
else
/* use VRM8 (standard) calculation */
data
->
in_max
[
0
]
=
IN_TO_REG
(
val
);
w83627hf_write_value
(
client
,
W83781D_REG_IN_MAX
(
0
),
data
->
in_max
[
0
]);
return
count
;
}
static
DEVICE_ATTR
(
in0_input
,
S_IRUGO
,
show_regs_in_0
,
NULL
)
static
DEVICE_ATTR
(
in0_min
,
S_IRUGO
|
S_IWUSR
,
show_regs_in_min0
,
store_regs_in_min0
)
static
DEVICE_ATTR
(
in0_max
,
S_IRUGO
|
S_IWUSR
,
show_regs_in_max0
,
store_regs_in_max0
)
#define device_create_file_in(client, offset) \
do { \
device_create_file(&client->dev, &dev_attr_in##offset##_input)
;
\
...
...
@@ -1191,6 +1274,11 @@ static void w83627hf_init_client(struct i2c_client *client)
data
->
vid
=
w83627thf_read_gpio5
(
client
)
&
0x1f
;
}
/* Read VRM & OVT Config only once */
if
(
w83627thf
==
data
->
type
||
w83637hf
==
data
->
type
)
data
->
vrm_ovt
=
w83627hf_read_value
(
client
,
W83627THF_REG_VRM_OVT_CFG
);
/* Convert VID to voltage based on default VRM */
data
->
vrm
=
DEFAULT_VRM
;
if
(
type
!=
w83697hf
)
...
...
include/linux/i2c-id.h
View file @
a85f1c6a
...
...
@@ -101,6 +101,14 @@
#define I2C_DRIVERID_UDA1342 53
/* UDA1342 audio codec */
#define I2C_DRIVERID_ADV7170 54
/* video encoder */
#define I2C_DRIVERID_RADEON 55
/* I2C bus on Radeon boards */
#define I2C_DRIVERID_MAX1617 56
/* temp sensor */
#define I2C_DRIVERID_SAA7191 57
/* video encoder */
#define I2C_DRIVERID_INDYCAM 58
/* SGI IndyCam */
#define I2C_DRIVERID_BT832 59
/* CMOS camera video processor */
#define I2C_DRIVERID_TDA9887 60
/* TDA988x IF-PLL demodulator */
#define I2C_DRIVERID_OVCAMCHIP 61
/* OmniVision CMOS image sens. */
#define I2C_DRIVERID_TDA7313 62
/* TDA7313 audio processor */
#define I2C_DRIVERID_MAX6900 63
/* MAX6900 real-time clock */
#define I2C_DRIVERID_EXP0 0xF0
/* experimental use id's */
...
...
@@ -264,6 +272,10 @@
#define I2C_HW_SMBUS_SCX200 0x0b
#define I2C_HW_SMBUS_NFORCE2 0x0c
#define I2C_HW_SMBUS_W9968CF 0x0d
#define I2C_HW_SMBUS_OV511 0x0e
/* OV511(+) USB 1.1 webcam ICs */
#define I2C_HW_SMBUS_OV518 0x0f
/* OV518(+) USB 1.1 webcam ICs */
#define I2C_HW_SMBUS_OV519 0x10
/* OV519 USB 1.1 webcam IC */
#define I2C_HW_SMBUS_OVFX2 0x11
/* Cypress/OmniVision FX2 webcam */
/* --- ISA pseudo-adapter */
#define I2C_HW_ISA 0x00
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment