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-spi.c
Go to the documentation of this file.
1
/*
2
* arizona-spi.c -- Arizona SPI 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/module.h>
15
#include <
linux/pm_runtime.h
>
16
#include <
linux/regmap.h
>
17
#include <
linux/regulator/consumer.h
>
18
#include <linux/slab.h>
19
#include <
linux/spi/spi.h
>
20
21
#include <
linux/mfd/arizona/core.h
>
22
23
#include "
arizona.h
"
24
25
static
int
__devinit
arizona_spi_probe(
struct
spi_device
*
spi
)
26
{
27
const
struct
spi_device_id
*
id
=
spi_get_device_id
(spi);
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_spi_regmap
;
36
break
;
37
#endif
38
#ifdef CONFIG_MFD_WM5110
39
case
WM5110
:
40
regmap_config = &
wm5110_spi_regmap
;
41
break
;
42
#endif
43
default
:
44
dev_err
(&spi->
dev
,
"Unknown device type %ld\n"
,
45
id->driver_data);
46
return
-
EINVAL
;
47
}
48
49
arizona =
devm_kzalloc
(&spi->
dev
,
sizeof
(*arizona),
GFP_KERNEL
);
50
if
(arizona ==
NULL
)
51
return
-
ENOMEM
;
52
53
arizona->
regmap
=
devm_regmap_init_spi
(spi, regmap_config);
54
if
(IS_ERR(arizona->
regmap
)) {
55
ret = PTR_ERR(arizona->
regmap
);
56
dev_err
(&spi->
dev
,
"Failed to allocate register map: %d\n"
,
57
ret);
58
return
ret
;
59
}
60
61
arizona->
type
=
id
->driver_data;
62
arizona->
dev
= &spi->
dev
;
63
arizona->
irq
= spi->
irq
;
64
65
return
arizona_dev_init
(arizona);
66
}
67
68
static
int
__devexit
arizona_spi_remove(
struct
spi_device
*spi)
69
{
70
struct
arizona *arizona =
dev_get_drvdata
(&spi->
dev
);
71
arizona_dev_exit
(arizona);
72
return
0;
73
}
74
75
static
const
struct
spi_device_id
arizona_spi_ids[] = {
76
{
"wm5102"
,
WM5102
},
77
{
"wm5110"
,
WM5110
},
78
{ },
79
};
80
MODULE_DEVICE_TABLE
(spi, arizona_spi_ids);
81
82
static
struct
spi_driver
arizona_spi_driver = {
83
.driver = {
84
.name =
"arizona"
,
85
.owner =
THIS_MODULE
,
86
.pm = &
arizona_pm_ops
,
87
},
88
.probe = arizona_spi_probe,
89
.remove =
__devexit_p
(arizona_spi_remove),
90
.id_table = arizona_spi_ids,
91
};
92
93
module_spi_driver
(arizona_spi_driver);
94
95
MODULE_DESCRIPTION
(
"Arizona SPI 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