|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
) k( z0 z) _5 h! e2 ?" u# T8 m; K#include <linux/init.h>' |* c& X) o- E# f
#include <linux/module.h>- |2 T0 x: h& ]4 A; f$ s& g9 C# h t
#include <linux/kernel.h>: L" F( F, g: e! T6 h1 P( e3 q1 C
#include <linux/types.h>
& B$ q! _& p3 k0 L#include <linux/gpio.h> S i- T& C% H1 u) A
#include <linux/leds.h>/ L2 | r1 Q' D3 J; E9 t0 N
#include <linux/platform_device.h>' z' R! l p. W- P
+ F; a x$ s& H) N
#include <asm/mach-types.h>
' O! N. y( }5 D9 W- z9 w- T#include <asm/mach/arch.h>
/ I( A; `4 {- l#include <mach/da8xx.h>' p4 u- }: {: O2 a7 O
#include <mach/mux.h>- L4 Q0 m$ b# ]1 j2 x- W' v- u
+ X# ^5 y1 m* Z9 E, Z
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
7 B2 }* H- ?$ i- B#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
$ z3 x6 D- v E/ r2 Q; L#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
% E, q* R7 c. Y# H- b! l#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)8 @, S y) u+ b: U! h4 f3 G8 h4 C
" n' v, l" s, a: t# R6 r
/* assign the tl som board LED-GPIOs*/
& }; ^. m+ L, l+ Wstatic const short da850_evm_tl_user_led_pins[] = {
, v. C$ |0 ?( Y! j& [' p /* These pins are definition at <mach/mux.h> file */1 r1 ^: L% e; I6 b0 T
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,4 X2 E9 y8 e! f
-1
6 `) ^+ J) F3 s# \. A# m( h};" [5 |# [5 q+ G" [4 P) A4 o
' a$ A$ v" z9 u% A: ustatic struct gpio_led da850_evm_tl_leds[] = {
5 ]- f: e3 a. c {$ [4 u5 q8 ^: i1 c
.active_low = 0,
/ G/ l* z I' B4 l7 h1 { .gpio = DA850_USER_LED0,
5 R2 w0 p* N7 j0 q5 Q .name = "user_led0"," r! [8 h! G% Z* x# Y
.default_trigger = "default-on",
5 c3 C2 ?3 D# K9 s0 p0 v! O },7 i F' p% D% ~8 k
{
; d9 `, ]0 _- o' x$ V6 S9 o- n1 t( r .active_low = 0,
/ F" w7 w5 V3 P9 m .gpio = DA850_USER_LED1,* S2 d" L) o3 X' [
.name = "user_led1",: |3 D5 H R/ w6 {, ~, W! S/ c
.default_trigger = "default-on",
( b# `! i$ q* b5 ^+ I8 ]2 O },: P Y5 O0 v+ ~* ~: f% P, t( Z8 B
{! Y5 H8 x. f# q1 |3 E* g
.active_low = 0,# h$ w4 E3 R5 ?/ C
.gpio = DA850_USER_LED2,3 N4 R: i3 u4 Z/ B+ e% V9 S) c4 C4 G
.name = "user_led2",
) K- Y5 w! e: _2 l7 l .default_trigger = "default-on",3 W) S9 G* @& v
},
- O/ R5 h, N# |0 E- \/ Q9 n {
, |0 j0 x$ g: m; o' J j. u# j .active_low = 0,: `1 w! E. e: g6 d* |2 ^$ c
.gpio = DA850_USER_LED3,
: X4 A0 b P4 w& w .name = "user_led3",
& U6 @! P: U1 W% @/ U .default_trigger = "default-on",
' V3 z9 h& t: B D+ V0 [7 q },
2 a% O7 D. K' Y6 t1 ]/ a};* Z% v" i" s- n8 z: s8 z5 u
4 d7 V9 p5 `/ p. d6 _0 d
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {, x2 ]5 v4 W2 Q
.leds = da850_evm_tl_leds,* T w3 |, q3 \9 ^$ h/ b
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),- o6 d5 D( A, L/ Y4 A8 A& r
};& p" e- }% a. i+ w9 A' |
+ G. ?% J6 S; N* P2 o/ Q8 |
static void led_dev_release(struct device *dev)
2 P+ H; a: e# k* q{
# h! i7 ~$ ?, j3 u" k};
: @' }3 s( W3 O% e+ T# z8 Y) h# B2 R
static struct platform_device da850_evm_tl_leds_device = {* s, u+ `- U& c& w1 B5 {6 J
.name = "leds-gpio",
! N% G5 b, m' M# v( M/ S) | .id = 1,( _5 N. R) R$ s, Q; u0 @1 r( P: B
.dev = {
/ K& G; U' \. ^/ E. ~ .platform_data = &da850_evm_tl_leds_pdata,
% p9 E H0 F$ z; z .release = led_dev_release,
; y8 S, j8 E% L: k0 W2 W' g }
* D0 S. P, d- ^};# d" V8 Y" H# y6 J2 h
) x: Y; h; q2 u( e( qstatic int __init led_platform_init(void)
' h8 K N5 w( m' h& K{
9 q. R/ W0 G* P! k7 T int ret;
8 e# [- `4 L3 o9 J#if 0
- j+ B& C" o v$ L! t. d ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
' x- K/ w Z& H& H+ ?- r; X: { if (ret)
" n' a. f/ ]2 U+ q( U3 l pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
# H2 ?! F- Y Z1 b "%d\n", ret);# B- G2 ~& {2 e+ M
#endif+ b) z. m# B. ?( J, x" ?1 r
ret = platform_device_register(&da850_evm_tl_leds_device);
: m6 J' F; t+ @3 d4 z3 V if (ret)
l$ p0 q3 C: |4 q* ~9 M! o5 { pr_warning("Could not register som GPIO expander LEDS");- E, D. a2 A" m# O5 T1 P
else7 N5 U5 o/ _. Y% t5 ^. k
printk(KERN_INFO "LED register sucessful!\n");
2 ]* t4 z# R0 r t: h" v+ l) d$ o$ u0 [0 G5 y( O, h
return ret;: ^ B; g1 s, ]2 J% m# {
}
" r% A; q& W4 ^+ c! X! F/ W1 Q0 L3 w! u5 M9 ~3 }( u
static void __exit led_platform_exit(void)
4 ^+ W K- ~" _1 ]# x{9 D: Q; x4 G ] C0 u
platform_device_unregister(&da850_evm_tl_leds_device);
" v& P$ ^' P+ j! H7 X
1 E3 |. W3 d( j# W: W printk(KERN_INFO "LED unregister!\n");
- x% w" `2 y4 M) U$ A}
@, ?! j, c$ R! H1 v6 w/ Y9 |' a
module_init(led_platform_init);: @3 ?" \+ t6 B8 h7 ?1 @
module_exit(led_platform_exit);" p4 H8 g k6 `7 f- j+ X$ V/ @
; n4 N/ e- n8 e o% N! d7 a
MODULE_DESCRIPTION("Led platform driver");) v/ }+ w+ r0 X! q
MODULE_AUTHOR("Tronlong");
7 H8 S8 W0 h$ @$ x1 i8 ?MODULE_LICENSE("GPL");0 f* E1 _, o$ D/ E e) u
1 A. L2 I" E, D* }6 {: Y9 [
|
|