Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
misc
ad525x_dpot-i2c.c
Go to the documentation of this file.
1
/*
2
* Driver for the Analog Devices digital potentiometers (I2C bus)
3
*
4
* Copyright (C) 2010-2011 Michael Hennerich, Analog Devices Inc.
5
*
6
* Licensed under the GPL-2 or later.
7
*/
8
9
#include <linux/i2c.h>
10
#include <linux/module.h>
11
12
#include "
ad525x_dpot.h
"
13
14
/* I2C bus functions */
15
static
int
write_d8(
void
*
client
,
u8
val
)
16
{
17
return
i2c_smbus_write_byte
(client, val);
18
}
19
20
static
int
write_r8d8(
void
*
client
,
u8
reg
,
u8
val
)
21
{
22
return
i2c_smbus_write_byte_data
(client, reg, val);
23
}
24
25
static
int
write_r8d16(
void
*
client
,
u8
reg
,
u16
val
)
26
{
27
return
i2c_smbus_write_word_data
(client, reg, val);
28
}
29
30
static
int
read_d8(
void
*
client
)
31
{
32
return
i2c_smbus_read_byte
(client);
33
}
34
35
static
int
read_r8d8(
void
*
client
,
u8
reg
)
36
{
37
return
i2c_smbus_read_byte_data
(client, reg);
38
}
39
40
static
int
read_r8d16(
void
*
client
,
u8
reg
)
41
{
42
return
i2c_smbus_read_word_data
(client, reg);
43
}
44
45
static
const
struct
ad_dpot_bus_ops
bops = {
46
.read_d8 =
read_d8
,
47
.read_r8d8 =
read_r8d8
,
48
.read_r8d16 =
read_r8d16
,
49
.write_d8 =
write_d8
,
50
.write_r8d8 =
write_r8d8
,
51
.write_r8d16 =
write_r8d16
,
52
};
53
54
static
int
__devinit
ad_dpot_i2c_probe(
struct
i2c_client
*
client
,
55
const
struct
i2c_device_id
*
id
)
56
{
57
struct
ad_dpot_bus_data
bdata = {
58
.
client
=
client
,
59
.bops = &
bops
,
60
};
61
62
if
(!i2c_check_functionality(client->
adapter
,
63
I2C_FUNC_SMBUS_WORD_DATA
)) {
64
dev_err
(&client->
dev
,
"SMBUS Word Data not Supported\n"
);
65
return
-
EIO
;
66
}
67
68
return
ad_dpot_probe
(&client->
dev
, &bdata, id->driver_data, id->
name
);
69
}
70
71
static
int
__devexit
ad_dpot_i2c_remove(
struct
i2c_client
*client)
72
{
73
return
ad_dpot_remove
(&client->
dev
);
74
}
75
76
static
const
struct
i2c_device_id
ad_dpot_id[] = {
77
{
"ad5258"
,
AD5258_ID
},
78
{
"ad5259"
,
AD5259_ID
},
79
{
"ad5251"
,
AD5251_ID
},
80
{
"ad5252"
,
AD5252_ID
},
81
{
"ad5253"
,
AD5253_ID
},
82
{
"ad5254"
,
AD5254_ID
},
83
{
"ad5255"
,
AD5255_ID
},
84
{
"ad5241"
,
AD5241_ID
},
85
{
"ad5242"
,
AD5242_ID
},
86
{
"ad5243"
,
AD5243_ID
},
87
{
"ad5245"
,
AD5245_ID
},
88
{
"ad5246"
,
AD5246_ID
},
89
{
"ad5247"
,
AD5247_ID
},
90
{
"ad5248"
,
AD5248_ID
},
91
{
"ad5280"
,
AD5280_ID
},
92
{
"ad5282"
,
AD5282_ID
},
93
{
"adn2860"
,
ADN2860_ID
},
94
{
"ad5273"
,
AD5273_ID
},
95
{
"ad5161"
,
AD5161_ID
},
96
{
"ad5171"
,
AD5171_ID
},
97
{
"ad5170"
,
AD5170_ID
},
98
{
"ad5172"
,
AD5172_ID
},
99
{
"ad5173"
,
AD5173_ID
},
100
{
"ad5272"
,
AD5272_ID
},
101
{
"ad5274"
,
AD5274_ID
},
102
{}
103
};
104
MODULE_DEVICE_TABLE
(i2c, ad_dpot_id);
105
106
static
struct
i2c_driver
ad_dpot_i2c_driver = {
107
.driver = {
108
.name =
"ad_dpot"
,
109
.owner =
THIS_MODULE
,
110
},
111
.probe = ad_dpot_i2c_probe,
112
.remove =
__devexit_p
(ad_dpot_i2c_remove),
113
.id_table = ad_dpot_id,
114
};
115
116
module_i2c_driver
(ad_dpot_i2c_driver);
117
118
MODULE_AUTHOR
(
"Michael Hennerich <
[email protected]
>"
);
119
MODULE_DESCRIPTION
(
"digital potentiometer I2C bus driver"
);
120
MODULE_LICENSE
(
"GPL"
);
121
MODULE_ALIAS
(
"i2c:ad_dpot"
);
Generated on Thu Jan 10 2013 13:54:28 for Linux Kernel by
1.8.2