|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
. @' X" S$ U. Q5 |#include <linux/init.h>
5 U8 f) D- j8 U# Y% z" k. A. M#include <linux/module.h>& I' C; P+ W! D% v, H
#include <linux/kernel.h>4 |7 H' I' o' C* X v+ t
#include <linux/types.h>
+ [) X: [( W, [#include <linux/gpio.h>; k( S% G. s2 ~" k; q: U& T
#include <linux/leds.h>
, ]! a2 o3 R3 ~6 Z#include <linux/platform_device.h>
5 q+ y. p8 B" S' k1 c: k# R
8 W* S0 Y0 K, L#include <asm/mach-types.h>5 g s( G* a7 y1 d: Y R+ h8 g
#include <asm/mach/arch.h>
$ c) L) l; X6 h4 t" ^; y#include <mach/da8xx.h>
! K+ ?$ ]/ L; P. Z, g8 s#include <mach/mux.h>1 S) A- }/ u& r- O/ n9 F+ N
) Q' I7 _/ O F. [6 k#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)$ x% ^# { @1 \1 F
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)$ X' o& b1 h' [! s! v0 P: U7 q7 w, m
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
( g P; ?$ a* a7 _#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
* l( j% y" Y" F9 z7 W
. p0 @: u0 z* Z/* assign the tl som board LED-GPIOs*/8 W; M% Q1 f& i$ o- b
static const short da850_evm_tl_user_led_pins[] = {
" a2 o1 g3 i1 }& Y /* These pins are definition at <mach/mux.h> file */
- r4 Z* Q+ T5 i4 q0 U9 D$ t DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,5 E- u$ h- [) M0 h( s5 M, t) u K
-1; z* M( \5 l# ?% v5 R- F/ k; c! W
};
4 d- o+ m3 l% _ }4 o% t4 h6 X6 p p3 M
static struct gpio_led da850_evm_tl_leds[] = {; |! X* g( c) a, J* Z$ D! m
{
$ ^" J- _% C' a .active_low = 0,
% [) p: B0 _+ o: c& y5 _! @, ?+ x .gpio = DA850_USER_LED0,# a) ^+ X: k3 _4 t E+ Q
.name = "user_led0",
' m2 N* O. Y8 N5 a .default_trigger = "default-on",+ D- g8 M1 `2 q* l# Z# H. v
},
& r; d% _6 O4 O# ?; ~ B. N+ ?+ R {" i: ?9 `5 J) g. g/ i
.active_low = 0,
5 h: y4 O0 _2 }# ] .gpio = DA850_USER_LED1,$ U6 g- J# j6 Z# V: E
.name = "user_led1",
: X/ u" T% E# c Z+ L$ r .default_trigger = "default-on",
' b% j7 B0 K2 O+ q },2 ^& g3 Y ^3 X/ ]) b$ E% ]/ A
{4 w- f* e4 G1 z: A! I# ]" A1 N+ P
.active_low = 0,
+ e, ]" ]5 [2 Z2 G6 ?' q8 Q( h .gpio = DA850_USER_LED2,
) f7 F0 b1 D& z3 W% [ .name = "user_led2",
8 M1 w+ I" S3 w Q: z+ C .default_trigger = "default-on",5 b/ d# \8 y4 w0 Z1 F# \
},
+ C+ r6 k( T4 L5 |6 ]; [% | {; G& W5 [5 q- Z/ ~
.active_low = 0," y+ k( V0 c. v: f4 g
.gpio = DA850_USER_LED3,
T1 b8 F7 N* X/ ^9 z .name = "user_led3",
1 k( O1 e8 o; `& ~: ]$ D .default_trigger = "default-on",! ?+ [$ C* R% u$ o2 A. G* {
},' [6 i4 @/ n h- F+ J
};
/ e5 @% t* k" F6 V/ f
" L5 i# B1 B# J' l; q/ o. mstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
" V3 Y2 ]# [# [ g .leds = da850_evm_tl_leds,9 O0 T$ Q a! m% f* F, F- D: o
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),, x5 C8 U }* q7 | @( b @
};
/ j6 k% D+ U% Y7 _2 ^, E
6 w! ]' z4 O7 @8 k. g3 C+ A4 Jstatic void led_dev_release(struct device *dev)
. R4 f. ?/ a7 c6 N1 H2 d{
7 I2 W/ \4 e/ }: d; P, X7 s# s};- v9 V/ S6 m8 o
. N# G- S, z5 D! ~( \% ~$ xstatic struct platform_device da850_evm_tl_leds_device = {
% e+ } W! p" ~! l .name = "leds-gpio",# F$ S1 F, p9 ]2 u
.id = 1,& \5 ^* O) ~# z) H
.dev = {
+ }! B$ y* j$ |( a! @ .platform_data = &da850_evm_tl_leds_pdata,
9 h. V4 Q! |; f" a8 C/ c .release = led_dev_release,( h/ P$ u' o: @' q4 |
}, G- n, E1 o8 `. d& E
};
c) N% h- I) Q5 p3 Y/ o. d* i) H8 ?( s4 ^$ N# G
static int __init led_platform_init(void)- c2 J. w* M& {5 L
{- {) j" D) F# f, h' s
int ret;
/ ~3 V; W' k; f, V) J- F2 `, N#if 0
3 M- o8 T( d8 o* ?; H: M! M* ~( e ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);+ G8 ^% f* C* m) U8 q- j
if (ret)0 u" H' o" `5 `: _/ p
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
8 S5 n3 m7 t# _) {: K( u "%d\n", ret);
" Y4 D( T6 B0 A z- I#endif
2 o* d) L) b( @, T6 a, M% x ret = platform_device_register(&da850_evm_tl_leds_device);
/ T& L! M" T+ L+ Z' U' b/ q if (ret)
2 J& C v+ [5 ]2 Y& g3 Q/ `; S pr_warning("Could not register som GPIO expander LEDS");
4 F- e% w- ]# T else
; l& p5 q+ J1 O7 u/ E- A. \' m printk(KERN_INFO "LED register sucessful!\n");* Z' x2 N+ |1 d* a
5 a# p1 K! [+ |6 R7 E, p) b return ret;/ \# C* u: F! [* w3 g
}+ x0 Y" F/ d- c/ G: q
; A4 K7 F5 A; l- V! ^! m6 Zstatic void __exit led_platform_exit(void): T; A, i: B1 I% o9 ?( }
{
: `% M' [6 t: _$ ^- H1 g platform_device_unregister(&da850_evm_tl_leds_device);
: N9 k5 u4 ~$ s' b2 x$ c8 a
; @" P0 J4 O% Q+ J' q printk(KERN_INFO "LED unregister!\n");( ^% v) q2 e& N: A
}" e) ?4 m! e" E* [3 o* u
5 ^7 m. t) s7 h$ @module_init(led_platform_init);0 Z) z. S2 G; b& ~( @1 u: v1 a0 J
module_exit(led_platform_exit);6 d, [7 J5 g$ }8 q2 E
/ ~+ s: h/ a$ ~, }MODULE_DESCRIPTION("Led platform driver");; ^9 a/ J Y* Y9 R/ Q$ B* _
MODULE_AUTHOR("Tronlong");
; S6 ?5 m1 A' f- MMODULE_LICENSE("GPL");
9 S' R: `$ |( h K# u
4 P. B" k# Q0 M$ I$ f |
|