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
mfd
arizona-i2c.c
Go to the documentation of this file.
1
/*
2
* Arizona-i2c.c -- Arizona I2C bus interface
3
*
4
* Copyright 2012 Wolfson Microelectronics plc
5
*
6
* Author: Mark Brown <
[email protected]
>
7
*
8
* This program is free software; you can redistribute it and/or modify
9
* it under the terms of the GNU General Public License version 2 as
10
* published by the Free Software Foundation.
11
*/
12
13
#include <
linux/err.h
>
14
#include <linux/i2c.h>
15
#include <linux/module.h>
16
#include <
linux/pm_runtime.h
>
17
#include <
linux/regmap.h
>
18
#include <
linux/regulator/consumer.h
>
19
#include <linux/slab.h>
20
21
#include <
linux/mfd/arizona/core.h
>
22
23
#include "
arizona.h
"
24
25
static
__devinit
int
arizona_i2c_probe(
struct
i2c_client
*i2c,
26
const
struct
i2c_device_id
*
id
)
27
{
28
struct
arizona
*
arizona
;
29
const
struct
regmap_config *regmap_config;
30
int
ret
;
31
32
switch
(id->driver_data) {
33
#ifdef CONFIG_MFD_WM5102
34
case
WM5102
:
35
regmap_config = &
wm5102_i2c_regmap
;
36
break
;
37
#endif
38
#ifdef CONFIG_MFD_WM5110
39
case
WM5110
:
40
regmap_config = &
wm5110_i2c_regmap
;
41
break
;
42
#endif
43
default
:
44
dev_err
(&i2c->
dev
,
"Unknown device type %ld\n"
,
45
id->driver_data);
46
return
-
EINVAL
;
47
}
48
49
arizona =
devm_kzalloc
(&i2c->
dev
,
sizeof
(*arizona),
GFP_KERNEL
);
50
if
(arizona ==
NULL
)
51
return
-
ENOMEM
;
52
53
arizona->
regmap
=
devm_regmap_init_i2c
(i2c, regmap_config);
54
if
(IS_ERR(arizona->
regmap
)) {
55
ret = PTR_ERR(arizona->
regmap
);
56
dev_err
(&i2c->
dev
,
"Failed to allocate register map: %d\n"
,
57
ret);
58
return
ret
;
59
}
60
61
arizona->
type
=
id
->driver_data;
62
arizona->
dev
= &i2c->
dev
;
63
arizona->
irq
= i2c->
irq
;
64
65
return
arizona_dev_init
(arizona);
66
}
67
68
static
int
__devexit
arizona_i2c_remove(
struct
i2c_client
*i2c)
69
{
70
struct
arizona *arizona =
dev_get_drvdata
(&i2c->
dev
);
71
arizona_dev_exit
(arizona);
72
return
0;
73
}
74
75
static
const
struct
i2c_device_id
arizona_i2c_id[] = {
76
{
"wm5102"
,
WM5102
},
77
{
"wm5110"
,
WM5110
},
78
{ }
79
};
80
MODULE_DEVICE_TABLE
(i2c, arizona_i2c_id);
81
82
static
struct
i2c_driver
arizona_i2c_driver = {
83
.driver = {
84
.name =
"arizona"
,
85
.owner =
THIS_MODULE
,
86
.pm = &
arizona_pm_ops
,
87
},
88
.probe = arizona_i2c_probe,
89
.remove =
__devexit_p
(arizona_i2c_remove),
90
.id_table = arizona_i2c_id,
91
};
92
93
module_i2c_driver
(arizona_i2c_driver);
94
95
MODULE_DESCRIPTION
(
"Arizona I2C bus interface"
);
96
MODULE_AUTHOR
(
"Mark Brown <
[email protected]
>"
);
97
MODULE_LICENSE
(
"GPL"
);
Generated on Thu Jan 10 2013 13:53:44 for Linux Kernel by
1.8.2