|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
, U6 \' Y# K: U4 Z#include <linux/init.h>
2 [% g6 [* U' Y( E#include <linux/module.h>& _1 z6 c+ `& [& z/ v2 g
#include <linux/kernel.h>& `) Q, A: ]4 {% ~$ }* `+ Y7 \/ R
#include <linux/types.h>
7 x( i6 E3 Q* O. m' s# m3 S, o* {1 `& p#include <linux/gpio.h>& ~* R/ w3 {+ X/ G* ?
#include <linux/leds.h>
( l. L) h6 | Q+ o* Y, {#include <linux/platform_device.h> c: P( K: k. a% N
. O0 l$ V9 G0 F. K* c; t#include <asm/mach-types.h> G% m J. a' C: e" L& W
#include <asm/mach/arch.h>$ b' \/ Q) {# U: r+ W. J' N
#include <mach/da8xx.h>- \) ]/ T/ o+ R4 W; N. ?9 D+ \
#include <mach/mux.h># b0 V* ?9 y) y) r4 T+ J
# f$ o, j @8 K' E+ T#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)3 S# A8 s* O; d/ i% z+ N
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)$ _6 |# f3 t8 u1 b# q4 U, {1 x
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)% |: s3 }/ w3 l$ t4 N0 ?
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)0 b: t- E( g" u8 s
6 j+ R9 y1 @! Y }; f/* assign the tl som board LED-GPIOs*/( v, N' S+ {1 N( w* R `
static const short da850_evm_tl_user_led_pins[] = {; ?; p4 r2 P3 D$ D1 R9 X7 u0 X
/* These pins are definition at <mach/mux.h> file */
7 R$ |1 B8 @) Z4 a% _9 A DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,; ]4 V1 I; ^2 V, O# `, ^6 x& G
-1
7 R) @9 d- f4 k- T};
' U7 \0 R2 K( E" h m$ \* S) V* R8 M
6 q& j% y1 h; R/ o1 W: Rstatic struct gpio_led da850_evm_tl_leds[] = {
( q3 K0 U. h/ C( R# v, X {
+ Q5 P: E% x3 `: @7 Y .active_low = 0,! i) W$ n) p/ w* M! z# I6 a' j
.gpio = DA850_USER_LED0,6 t" r1 N( t$ }: L
.name = "user_led0",' O1 D* K" G1 ?/ X" l# \
.default_trigger = "default-on",
7 l" K9 ^* j0 K M. U6 _/ q5 H },3 x' [/ o# ]/ C( h, A
{
! c8 |/ C/ l( ?; l4 _* m* S6 E .active_low = 0,; F3 ^# ~$ y9 K" Y! q8 Q/ ~
.gpio = DA850_USER_LED1,
% G9 a. m$ V! @+ J .name = "user_led1",
( \9 Q/ m% p8 G1 M% ?: q .default_trigger = "default-on",
3 L& W9 d: S+ w },
! k9 z& G% V6 I( l1 I& h4 ? {
( m4 k9 ]; f) b8 E3 A .active_low = 0,
/ z9 ^" v# M9 R- G9 w1 K2 w .gpio = DA850_USER_LED2,0 u$ P L' B6 L9 k
.name = "user_led2",7 H1 L e9 |; T% l {, {
.default_trigger = "default-on",
& B( e9 m" m' h, f }," B, h$ k" Q% s l, ?& u8 \
{. n, I* g. j( N& D* i4 W1 F `
.active_low = 0,
8 p& f% a0 ^! v' n* A .gpio = DA850_USER_LED3,
2 y* ?+ m/ Q0 Y! k. p! ~; Q3 }: A .name = "user_led3",7 m/ V; B# f8 @( `
.default_trigger = "default-on",
$ ^" ?/ D* y p( x },! V' m* X6 H+ k9 t# I1 O& u
};
4 t" |' E& z/ [3 j& C
( I, ?) P+ o# {static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. F3 }7 E# T* f' X$ q9 _ .leds = da850_evm_tl_leds," O: d1 C+ C( v$ h# A
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),; }' z# U* `1 \# V
};
! e( |) X8 X' n' O! R! C& j. T. j: B
, q& _8 |8 J0 ~) K3 vstatic void led_dev_release(struct device *dev)) ^; {4 R) I1 q- Q7 y2 i
{
4 B1 F8 K: H5 |9 R};0 D. z6 w ^9 K( k& q2 U
& Z+ t2 o6 L6 Tstatic struct platform_device da850_evm_tl_leds_device = {. F% k3 M3 E, c% |3 ^
.name = "leds-gpio",; e' e: G" D, ]3 |2 M- C; D; N' @
.id = 1,
5 K- D! d; x7 h! K0 Z w8 d .dev = {
; K: Z& r; V [8 X0 J .platform_data = &da850_evm_tl_leds_pdata,) {- r6 Z) b7 }* b0 c
.release = led_dev_release," M* g1 ~ ?9 L r1 l
}* L! D! y. c @
};
, Z$ l& @: @6 a. a+ u9 H, K- E/ X3 l% G% ~+ g+ q) D3 j& F
static int __init led_platform_init(void); I( Q1 p$ `5 x
{( ]* A! L! t$ y& Y9 _
int ret;( E4 C; ^5 {+ r0 Y; {6 T! L
#if 0
/ b6 i3 G; Q- \7 q ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);( s5 e8 k- X6 u( q! H# v
if (ret)
* s2 F B R% g( e pr_warning("da850_evm_tl_leds_init : User LED mux failed :"& N( h- Z. [& V9 N; v1 G
"%d\n", ret);9 u8 r( [8 ^: V' h* ?$ {& W
#endif
. P4 V) R" d: ^1 N9 a v; t; d ret = platform_device_register(&da850_evm_tl_leds_device);' f6 C$ N9 Q. @8 k- V" x
if (ret)
, _0 `, i9 b1 n0 D4 i) \ pr_warning("Could not register som GPIO expander LEDS");
/ s# P1 e. F: g3 j6 H7 f else
0 F- z1 ^3 F& `$ |; v printk(KERN_INFO "LED register sucessful!\n");
# Z/ m: a2 `+ k: p1 C4 U- S( v: F, m7 O# w5 N4 ]3 W
return ret;
% [( t/ r. r+ h}: P3 O0 s F% R( N& A/ N
7 Q/ k. P" z3 f3 p; [
static void __exit led_platform_exit(void), I1 G( M; H9 _# {; U
{; X, L1 [/ k# i: R' ]
platform_device_unregister(&da850_evm_tl_leds_device);
+ S6 R1 ~7 P/ w) j$ D0 n/ }) J8 d& r5 A% n5 B" B& M: U1 W
printk(KERN_INFO "LED unregister!\n");! e$ c3 u$ N$ b: t
}
: ]& O% D1 `. o6 W. f& i: h4 x P9 G0 C# D+ }
module_init(led_platform_init);: g6 i' V z; @
module_exit(led_platform_exit);
. f0 o9 l7 R$ G: m
4 F5 `8 l- ^8 D2 FMODULE_DESCRIPTION("Led platform driver");
+ c+ c( d2 Y# O: B7 J3 \9 d1 c; gMODULE_AUTHOR("Tronlong");4 U' J8 A2 h! x) y
MODULE_LICENSE("GPL");3 G# b, y7 `* ?+ e$ t; |+ j
! V* b7 ]5 R7 X+ s3 @% W- ~8 @
|
|