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
828b358c
Commit
828b358c
authored
Apr 22, 2003
by
Christoph Hellwig
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[PATCH] i2c: bring i2c-viapro uptodate with the style guide
parent
99676dae
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
149 additions
and
172 deletions
+149
-172
drivers/i2c/busses/i2c-viapro.c
drivers/i2c/busses/i2c-viapro.c
+149
-172
No files found.
drivers/i2c/busses/i2c-viapro.c
View file @
828b358c
...
...
@@ -42,23 +42,24 @@
#include <linux/init.h>
#include <asm/io.h>
#define SMBBA1 0x90
#define SMBBA2 0x80
#define SMBBA3 0xD0
#define SMBBA1
0x90
#define SMBBA2
0x80
#define SMBBA3
0xD0
/* SMBus address offsets */
#define SMBHSTSTS (0 + vt596_smba)
#define SMBHSLVSTS (1 + vt596_smba)
#define SMBHSTCNT (2 + vt596_smba)
#define SMBHSTCMD (3 + vt596_smba)
#define SMBHSTADD (4 + vt596_smba)
#define SMBHSTDAT0 (5 + vt596_smba)
#define SMBHSTDAT1 (6 + vt596_smba)
#define SMBBLKDAT (7 + vt596_smba)
#define SMBSLVCNT (8 + vt596_smba)
#define SMBSHDWCMD (9 + vt596_smba)
#define SMBSLVEVT (0xA + vt596_smba)
#define SMBSLVDAT (0xC + vt596_smba)
static
unsigned
short
vt596_smba
;
#define SMBHSTSTS (vt596_smba + 0)
#define SMBHSLVSTS (vt596_smba + 1)
#define SMBHSTCNT (vt596_smba + 2)
#define SMBHSTCMD (vt596_smba + 3)
#define SMBHSTADD (vt596_smba + 4)
#define SMBHSTDAT0 (vt596_smba + 5)
#define SMBHSTDAT1 (vt596_smba + 6)
#define SMBBLKDAT (vt596_smba + 7)
#define SMBSLVCNT (vt596_smba + 8)
#define SMBSHDWCMD (vt596_smba + 9)
#define SMBSLVEVT (vt596_smba + 0xA)
#define SMBSLVDAT (vt596_smba + 0xC)
/* PCI Address Constants */
...
...
@@ -68,14 +69,14 @@
static
unsigned
short
smb_cf_hstcfg
=
0xD2
;
#define SMBHSTCFG (smb_cf_hstcfg)
#define SMBSLVC (
SMBHSTCFG+
1)
#define SMBSHDW1 (
SMBHSTCFG+
2)
#define SMBSHDW2 (
SMBHSTCFG+
3)
#define SMBREV (
SMBHSTCFG+
4)
#define SMBSLVC (
smb_cf_hstcfg +
1)
#define SMBSHDW1 (
smb_cf_hstcfg +
2)
#define SMBSHDW2 (
smb_cf_hstcfg +
3)
#define SMBREV (
smb_cf_hstcfg +
4)
/* Other settings */
#define MAX_TIMEOUT
500
#define
ENABLE_INT9
0
#define MAX_TIMEOUT
500
#define
ENABLE_INT9
0
/* VT82C596 constants */
#define VT596_QUICK 0x00
...
...
@@ -84,144 +85,33 @@ static unsigned short smb_cf_hstcfg = 0xD2;
#define VT596_WORD_DATA 0x0C
#define VT596_BLOCK_DATA 0x14
/* insmod parameters */
/* If force is set to anything different from 0, we forcibly enable the
VT596. DANGEROUS! */
static
int
force
=
0
;
static
int
force
;
MODULE_PARM
(
force
,
"i"
);
MODULE_PARM_DESC
(
force
,
"Forcibly enable the SMBus. DANGEROUS!"
);
/* If force_addr is set to anything different from 0, we forcibly enable
the VT596 at the given address. VERY DANGEROUS! */
static
int
force_addr
=
0
;
static
int
force_addr
;
MODULE_PARM
(
force_addr
,
"i"
);
MODULE_PARM_DESC
(
force_addr
,
"Forcibly enable the SMBus at the given address. "
"EXTREMELY DANGEROUS!"
);
static
void
vt596_do_pause
(
unsigned
int
amount
);
static
int
vt596_transaction
(
void
);
s32
vt596_access
(
struct
i2c_adapter
*
adap
,
u16
addr
,
unsigned
short
flags
,
char
read_write
,
u8
command
,
int
size
,
union
i2c_smbus_data
*
data
);
u32
vt596_func
(
struct
i2c_adapter
*
adapter
);
static
struct
i2c_algorithm
smbus_algorithm
=
{
.
name
=
"Non-I2C SMBus adapter"
,
.
id
=
I2C_ALGO_SMBUS
,
.
smbus_xfer
=
vt596_access
,
.
functionality
=
vt596_func
,
};
static
struct
i2c_adapter
vt596_adapter
=
{
.
owner
=
THIS_MODULE
,
.
id
=
I2C_ALGO_SMBUS
|
I2C_HW_SMBUS_VIA2
,
.
algo
=
&
smbus_algorithm
,
.
dev
=
{
.
name
=
"unset"
,
},
};
static
unsigned
short
vt596_smba
=
0
;
/* Detect whether a compatible device can be found, and initialize it. */
int
vt596_setup
(
struct
pci_dev
*
VT596_dev
,
struct
pci_device_id
const
*
id
)
{
unsigned
char
temp
;
dev_info
(
&
VT596_dev
->
dev
,
"Found Via %s device
\n
"
,
VT596_dev
->
dev
.
name
);
/* Determine the address of the SMBus areas */
if
(
force_addr
)
{
vt596_smba
=
force_addr
&
0xfff0
;
force
=
0
;
}
else
{
if
((
pci_read_config_word
(
VT596_dev
,
id
->
driver_data
,
&
vt596_smba
))
||
!
(
vt596_smba
&
0x1
))
{
/* try 2nd address and config reg. for 596 */
if
((
id
->
device
==
PCI_DEVICE_ID_VIA_82C596_3
)
&&
(
!
pci_read_config_word
(
VT596_dev
,
SMBBA2
,
&
vt596_smba
))
&&
(
vt596_smba
&
0x1
))
{
smb_cf_hstcfg
=
0x84
;
}
else
{
/* no matches at all */
dev_err
(
&
VT596_dev
->
dev
,
"Cannot configure "
"SMBus I/O Base address
\n
"
);
return
(
-
ENODEV
);
}
}
vt596_smba
&=
0xfff0
;
if
(
vt596_smba
==
0
)
{
dev_err
(
&
VT596_dev
->
dev
,
"SMBus base address "
"uninitialized - upgrade BIOS or use "
"force_addr=0xaddr
\n
"
);
return
-
ENODEV
;
}
}
if
(
!
request_region
(
vt596_smba
,
8
,
"viapro-smbus"
))
{
dev_err
(
&
VT596_dev
->
dev
,
"SMBus region 0x%x already in use!
\n
"
,
vt596_smba
);
return
(
-
ENODEV
);
}
pci_read_config_byte
(
VT596_dev
,
SMBHSTCFG
,
&
temp
);
/* If force_addr is set, we program the new address here. Just to make
sure, we disable the VT596 first. */
if
(
force_addr
)
{
pci_write_config_byte
(
VT596_dev
,
SMBHSTCFG
,
temp
&
0xfe
);
pci_write_config_word
(
VT596_dev
,
id
->
driver_data
,
vt596_smba
);
pci_write_config_byte
(
VT596_dev
,
SMBHSTCFG
,
temp
|
0x01
);
dev_warn
(
&
VT596_dev
->
dev
,
"WARNING: SMBus interface set to new "
"address 0x%04x!
\n
"
,
vt596_smba
);
}
else
if
((
temp
&
1
)
==
0
)
{
if
(
force
)
{
/* NOTE: This assumes I/O space and other allocations
* WERE done by the Bios! Don't complain if your
* hardware does weird things after enabling this.
* :') Check for Bios updates before resorting to
* this.
*/
pci_write_config_byte
(
VT596_dev
,
SMBHSTCFG
,
temp
|
1
);
dev_info
(
&
VT596_dev
->
dev
,
"Enabling SMBus device
\n
"
);
}
else
{
dev_err
(
&
VT596_dev
->
dev
,
"SMBUS: Error: Host SMBus "
"controller not enabled! - upgrade BIOS or "
"use force=1
\n
"
);
return
(
-
ENODEV
);
}
}
if
((
temp
&
0x0E
)
==
8
)
dev_dbg
(
&
VT596_dev
->
dev
,
"using Interrupt 9 for SMBus.
\n
"
);
else
if
((
temp
&
0x0E
)
==
0
)
dev_dbg
(
&
VT596_dev
->
dev
,
"using Interrupt SMI# for SMBus.
\n
"
);
else
dev_dbg
(
&
VT596_dev
->
dev
,
"Illegal Interrupt configuration "
"(or code out of date)!
\n
"
);
pci_read_config_byte
(
VT596_dev
,
SMBREV
,
&
temp
);
dev_dbg
(
&
VT596_dev
->
dev
,
"SMBREV = 0x%X
\n
"
,
temp
);
dev_dbg
(
&
VT596_dev
->
dev
,
"VT596_smba = 0x%X
\n
"
,
vt596_smba
);
return
(
0
);
}
static
struct
i2c_adapter
vt596_adapter
;
/* Internally used pause function */
void
vt596_do_pause
(
unsigned
int
amount
)
static
void
vt596_do_pause
(
unsigned
int
amount
)
{
current
->
state
=
TASK_INTERRUPTIBLE
;
schedule_timeout
(
amount
);
}
/* Another internally used function */
int
vt596_transaction
(
void
)
static
int
vt596_transaction
(
void
)
{
int
temp
;
int
result
=
0
;
...
...
@@ -296,15 +186,16 @@ int vt596_transaction(void)
}
/* Return -1 on error. */
s
32
vt596_access
(
struct
i2c_adapter
*
adap
,
u16
addr
,
unsigned
short
flags
,
char
read_write
,
u8
command
,
int
size
,
union
i2c_smbus_data
*
data
)
s
tatic
s32
vt596_access
(
struct
i2c_adapter
*
adap
,
u16
addr
,
unsigned
short
flags
,
char
read_write
,
u8
command
,
int
size
,
union
i2c_smbus_data
*
data
)
{
int
i
,
len
;
switch
(
size
)
{
case
I2C_SMBUS_PROC_CALL
:
dev_info
(
&
vt596_adapter
.
dev
,
"I2C_SMBUS_PROC_CALL not supported!
\n
"
);
dev_info
(
&
vt596_adapter
.
dev
,
"I2C_SMBUS_PROC_CALL not supported!
\n
"
);
return
-
1
;
case
I2C_SMBUS_QUICK
:
outb_p
(((
addr
&
0x7f
)
<<
1
)
|
(
read_write
&
0x01
),
...
...
@@ -363,7 +254,6 @@ s32 vt596_access(struct i2c_adapter *adap, u16 addr, unsigned short flags,
if
((
read_write
==
I2C_SMBUS_WRITE
)
||
(
size
==
VT596_QUICK
))
return
0
;
switch
(
size
)
{
case
VT596_BYTE
:
/* Where is the result put? I assume here it is in
...
...
@@ -388,15 +278,127 @@ s32 vt596_access(struct i2c_adapter *adap, u16 addr, unsigned short flags,
return
0
;
}
u32
vt596_func
(
struct
i2c_adapter
*
adapter
)
static
u32
vt596_func
(
struct
i2c_adapter
*
adapter
)
{
return
I2C_FUNC_SMBUS_QUICK
|
I2C_FUNC_SMBUS_BYTE
|
I2C_FUNC_SMBUS_BYTE_DATA
|
I2C_FUNC_SMBUS_WORD_DATA
|
I2C_FUNC_SMBUS_BLOCK_DATA
;
}
static
struct
i2c_algorithm
smbus_algorithm
=
{
.
name
=
"Non-I2C SMBus adapter"
,
.
id
=
I2C_ALGO_SMBUS
,
.
smbus_xfer
=
vt596_access
,
.
functionality
=
vt596_func
,
};
static
struct
i2c_adapter
vt596_adapter
=
{
.
owner
=
THIS_MODULE
,
.
id
=
I2C_ALGO_SMBUS
|
I2C_HW_SMBUS_VIA2
,
.
algo
=
&
smbus_algorithm
,
.
dev
=
{
.
name
=
"unset"
,
},
};
static
int
__devinit
vt596_probe
(
struct
pci_dev
*
pdev
,
const
struct
pci_device_id
*
id
)
{
unsigned
char
temp
;
int
error
=
-
ENODEV
;
/* Determine the address of the SMBus areas */
if
(
force_addr
)
{
vt596_smba
=
force_addr
&
0xfff0
;
force
=
0
;
goto
found
;
}
if
((
pci_read_config_word
(
pdev
,
id
->
driver_data
,
&
vt596_smba
))
||
!
(
vt596_smba
&
0x1
))
{
/* try 2nd address and config reg. for 596 */
if
(
id
->
device
==
PCI_DEVICE_ID_VIA_82C596_3
&&
!
pci_read_config_word
(
pdev
,
SMBBA2
,
&
vt596_smba
)
&&
(
vt596_smba
&
0x1
))
{
smb_cf_hstcfg
=
0x84
;
}
else
{
/* no matches at all */
dev_err
(
&
pdev
->
dev
,
"Cannot configure "
"SMBus I/O Base address
\n
"
);
return
-
ENODEV
;
}
}
vt596_smba
&=
0xfff0
;
if
(
vt596_smba
==
0
)
{
dev_err
(
&
pdev
->
dev
,
"SMBus base address "
"uninitialized - upgrade BIOS or use "
"force_addr=0xaddr
\n
"
);
return
-
ENODEV
;
}
found:
if
(
!
request_region
(
vt596_smba
,
8
,
"viapro-smbus"
))
{
dev_err
(
&
pdev
->
dev
,
"SMBus region 0x%x already in use!
\n
"
,
vt596_smba
);
return
-
ENODEV
;
}
pci_read_config_byte
(
pdev
,
SMBHSTCFG
,
&
temp
);
/* If force_addr is set, we program the new address here. Just to make
sure, we disable the VT596 first. */
if
(
force_addr
)
{
pci_write_config_byte
(
pdev
,
SMBHSTCFG
,
temp
&
0xfe
);
pci_write_config_word
(
pdev
,
id
->
driver_data
,
vt596_smba
);
pci_write_config_byte
(
pdev
,
SMBHSTCFG
,
temp
|
0x01
);
dev_warn
(
&
pdev
->
dev
,
"WARNING: SMBus interface set to new "
"address 0x%04x!
\n
"
,
vt596_smba
);
}
else
if
((
temp
&
1
)
==
0
)
{
if
(
force
)
{
/* NOTE: This assumes I/O space and other allocations
* WERE done by the Bios! Don't complain if your
* hardware does weird things after enabling this.
* :') Check for Bios updates before resorting to
* this.
*/
pci_write_config_byte
(
pdev
,
SMBHSTCFG
,
temp
|
1
);
dev_info
(
&
pdev
->
dev
,
"Enabling SMBus device
\n
"
);
}
else
{
dev_err
(
&
pdev
->
dev
,
"SMBUS: Error: Host SMBus "
"controller not enabled! - upgrade BIOS or "
"use force=1
\n
"
);
goto
release_region
;
}
}
if
((
temp
&
0x0E
)
==
8
)
dev_dbg
(
&
pdev
->
dev
,
"using Interrupt 9 for SMBus.
\n
"
);
else
if
((
temp
&
0x0E
)
==
0
)
dev_dbg
(
&
pdev
->
dev
,
"using Interrupt SMI# for SMBus.
\n
"
);
else
dev_dbg
(
&
pdev
->
dev
,
"Illegal Interrupt configuration "
"(or code out of date)!
\n
"
);
pci_read_config_byte
(
pdev
,
SMBREV
,
&
temp
);
dev_dbg
(
&
pdev
->
dev
,
"SMBREV = 0x%X
\n
"
,
temp
);
dev_dbg
(
&
pdev
->
dev
,
"VT596_smba = 0x%X
\n
"
,
vt596_smba
);
vt596_adapter
.
dev
.
parent
=
&
pdev
->
dev
;
snprintf
(
vt596_adapter
.
dev
.
name
,
DEVICE_NAME_SIZE
,
"SMBus Via Pro adapter at %04x"
,
vt596_smba
);
return
i2c_add_adapter
(
&
vt596_adapter
);
release_region:
release_region
(
vt596_smba
,
8
);
return
error
;
}
static
void
__devexit
vt596_remove
(
struct
pci_dev
*
pdev
)
{
i2c_del_adapter
(
&
vt596_adapter
);
release_region
(
vt596_smba
,
8
);
}
static
struct
pci_device_id
vt596_ids
[]
__devinitdata
=
{
{
...
...
@@ -451,29 +453,6 @@ static struct pci_device_id vt596_ids[] __devinitdata = {
{
0
,
}
};
static
int
__devinit
vt596_probe
(
struct
pci_dev
*
dev
,
const
struct
pci_device_id
*
id
)
{
int
retval
;
retval
=
vt596_setup
(
dev
,
id
);
if
(
retval
)
return
retval
;
vt596_adapter
.
dev
.
parent
=
&
dev
->
dev
;
snprintf
(
vt596_adapter
.
dev
.
name
,
DEVICE_NAME_SIZE
,
"SMBus Via Pro adapter at %04x"
,
vt596_smba
);
retval
=
i2c_add_adapter
(
&
vt596_adapter
);
return
retval
;
}
static
void
__devexit
vt596_remove
(
struct
pci_dev
*
dev
)
{
i2c_del_adapter
(
&
vt596_adapter
);
}
static
struct
pci_driver
vt596_driver
=
{
.
name
=
"vt596 smbus"
,
.
id_table
=
vt596_ids
,
...
...
@@ -490,14 +469,12 @@ static int __init i2c_vt596_init(void)
static
void
__exit
i2c_vt596_exit
(
void
)
{
pci_unregister_driver
(
&
vt596_driver
);
release_region
(
vt596_smba
,
8
);
}
MODULE_AUTHOR
(
"Frodo Looijaard <frodol@dds.nl> and
Philip Edelbrock <phil@netroedge.com>"
);
MODULE_AUTHOR
(
"Frodo Looijaard <frodol@dds.nl> and "
"
Philip Edelbrock <phil@netroedge.com>"
);
MODULE_DESCRIPTION
(
"vt82c596 SMBus driver"
);
MODULE_LICENSE
(
"GPL"
);
module_init
(
i2c_vt596_init
);
...
...
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