|
|
求大神给下面的程序做注解,请稍详细些,谢谢。7 R) U% ~6 I2 I' O ~9 o( z7 ]
#include <linux/init.h>
7 P) q, g+ q- T" g+ T#include <linux/module.h>9 h, J; Z: E# L# P7 K
#include <linux/kernel.h>- F0 k) ^, R2 q8 Q% a7 T5 F
#include <linux/types.h>% v7 M& H5 C8 c* Q0 Y3 B/ k- L% h
#include <linux/gpio.h>
n+ `% ~4 S! {( V9 M#include <linux/leds.h>/ `! `8 [ ^# W' s+ ]9 n
#include <linux/platform_device.h>
; v4 M1 y2 p0 d1 E
6 A. R- M* X. ]# ~( |! o#include <asm/mach-types.h>
8 V" _/ Q9 B3 }/ g/ s8 u8 E#include <asm/mach/arch.h>
; v# p+ g5 w" t#include <mach/da8xx.h>" C9 Q% G! R; ?4 x
#include <mach/mux.h>
8 k' n% V1 N0 s; I- R* X) B @# ]) P% ~
2 D, F1 }# L7 ^* x, u# E0 I#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
2 ]( H* C! y! e* ~" b* H$ _#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)& f- |5 v, ]! I3 Q; \1 L( w3 n
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
H; `3 u, E7 W2 j7 W; Q* d/ z#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ V( J+ r- Z( t2 C9 W/ ?
8 R" ]2 H: _$ D( T/* assign the tl som board LED-GPIOs*/
0 h `) x5 I# R7 astatic const short da850_evm_tl_user_led_pins[] = {
0 o5 m, z9 l+ C' s. Q3 `. b9 E /* These pins are definition at <mach/mux.h> file */
7 \5 \& P: u( D- t: {0 g p5 Q DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
9 a8 H6 Z. W3 C. v5 Y4 ^2 G/ v -1( ]- b5 h8 S( q7 c" @% R
};
3 D' e7 a& n9 m2 c! ~! C8 w# Z5 v8 j( \; l$ s* n. F$ [9 ~5 D
static struct gpio_led da850_evm_tl_leds[] = {
& n% b, A, L1 Y0 x6 v- p {2 f' I# E, v- w0 @; ~8 \( ?) e& n
.active_low = 0,
, h9 Z0 B5 T6 o% y1 y$ j, J .gpio = DA850_USER_LED0,
( S9 m# c! K$ S. I .name = "user_led0",
- k+ U9 L, Z- u' w, c: p& ?& Q .default_trigger = "default-on",5 C( }. q) w7 i) M' ^% _
},# x7 w1 r) z7 z# ^. F3 i+ ?% ]
{7 O, x' |/ P6 s' c3 n5 N
.active_low = 0,) Q' l* B& L4 ?1 _
.gpio = DA850_USER_LED1,0 |$ c; {' n$ G: J1 n
.name = "user_led1",$ O* n* M" |" M+ B' {3 J6 ^3 w
.default_trigger = "default-on",
+ v" ~5 K+ H, {; ] },
! A h: n9 S4 Q2 z* ]2 t3 x {
6 A" m7 H- `' b J .active_low = 0," f; {3 B0 ^# G: c
.gpio = DA850_USER_LED2,
- r# k3 m4 q4 Y .name = "user_led2",5 D6 j! n/ [% ?3 B: l) h3 s3 e
.default_trigger = "default-on",
- w8 [2 `/ z n },4 R4 }! d1 l0 q! L! f; G% n5 N
{
- @4 L/ [, N4 f! g# c& T .active_low = 0,
4 a" t6 i) r1 |/ M# r( t .gpio = DA850_USER_LED3,
9 t' M+ b/ M) R$ a9 E% q; ]# u .name = "user_led3",5 l3 h6 P8 U3 `& Y) n: S3 ]( Q
.default_trigger = "default-on",
! ?% N. j: q, Z; A: C9 J },
6 y# A6 {7 G4 D- A: R; ]7 K};7 _; K5 _0 p: B( V4 X
' w O- D+ S- ?6 M
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {% M. L8 B, M3 E6 b6 Q
.leds = da850_evm_tl_leds, J6 q, u6 S B$ O7 z' i
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
6 u o D4 e1 U% @* `};
! [6 \7 S8 N. u" O+ {% ?& c
7 z% T6 l( j) T0 `3 R6 Hstatic void led_dev_release(struct device *dev)
/ D4 q# n8 c$ \9 a( F0 \# l+ o' u{! Q7 l8 ]* U7 X( d, t
};
* x8 X5 }5 J" E5 O) L
+ P) t3 ]! k! `5 z% ~7 hstatic struct platform_device da850_evm_tl_leds_device = {# W+ N/ Z# D1 P" [7 ~
.name = "leds-gpio",3 o# _" P, e. V% q7 j
.id = 1,
0 a- p4 H0 k$ J' p .dev = {
$ Y3 u8 k- g. Z( ^. j; ] .platform_data = &da850_evm_tl_leds_pdata,
3 \* _& l7 n! ]4 R .release = led_dev_release,0 w4 @8 v, W& T9 D5 u
}9 ~/ A) m! q' ?0 D V% x6 ?
};
6 Z1 z6 S/ W8 B& t
4 `9 y1 V; Q9 A' X' A/ C, Istatic int __init led_platform_init(void)% `! W$ ?( m" z4 t& h: c1 C* L# B7 r
{4 f* }0 @- S1 }' H
int ret;
5 r: Y6 @% ?7 q3 j; y#if 0
0 C7 o8 l8 m: n3 l Z+ N9 C ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 Y6 I/ Z! _( X. S! k
if (ret) q- A* q2 @" z
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
' A9 Z6 g! g. u0 ` s! q "%d\n", ret);2 Y$ ?3 V' c; e0 i% u% y
#endif9 {8 J: q% H5 c3 }) p
ret = platform_device_register(&da850_evm_tl_leds_device);+ H6 u" z9 Z: f) \
if (ret)
, i1 [' Z, f( m2 _ pr_warning("Could not register som GPIO expander LEDS");
l5 `- s6 D+ R* \5 Y( ` else
% G+ U0 y, h' T# s printk(KERN_INFO "LED register sucessful!\n");4 w ^! q% ^* E/ @) A3 W
r9 I, p# {4 g( c" g return ret;
) s) g! v3 T( y3 \: _. k0 S* n; t}
& s# Z8 S9 [( G5 j2 @$ W( P2 Y# t2 i: z) r
static void __exit led_platform_exit(void)
) v. A" N" L: W" v- g/ s; ~{
# J" a' L& q+ S5 S" \ platform_device_unregister(&da850_evm_tl_leds_device);+ S. R$ k+ e$ y
! O' V1 L3 y& ]% l: r5 W& f printk(KERN_INFO "LED unregister!\n");1 k: F3 @/ L) N% a, |/ m
}
+ V; N" E" C2 @- M" v+ D
$ w6 w& [! M0 V9 e+ J/ c6 M; Gmodule_init(led_platform_init);+ E4 _- k4 X7 D% y$ Z+ f: T9 i7 N
module_exit(led_platform_exit);; A0 e" X' w8 O
5 u* ?, G8 M3 o0 l" [% |, sMODULE_DESCRIPTION("Led platform driver");
e" k$ y3 c: X- gMODULE_AUTHOR("Tronlong");
5 Q6 C# C8 t0 Y4 |MODULE_LICENSE("GPL");
* d' q! {; O, X; l, N& T6 h, C2 E3 F! q o+ |
|
|