|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
+ e2 v. w B( R6 \6 K/ c+ u#include <linux/init.h>
! |4 t$ m1 D* ]" [#include <linux/module.h>8 t$ e. _! N+ F1 {! t0 v c
#include <linux/kernel.h>+ ^& X' g2 z/ x5 |3 e" V* N: W
#include <linux/types.h>- `6 S6 k# Q4 u2 j
#include <linux/gpio.h>
/ e8 d( }9 K- e/ X/ c+ W+ E0 E#include <linux/leds.h>, Y2 @3 _; Z2 P- b/ O3 Q
#include <linux/platform_device.h>6 V* y$ u6 }6 F5 w& g3 C4 S1 O
" R) a9 ]% i1 L0 s7 a/ t$ e, T7 a
#include <asm/mach-types.h>
& G" i5 x: v( d7 `" u4 j5 E#include <asm/mach/arch.h>
* y- y* ^/ C9 i# D#include <mach/da8xx.h>" A$ P% F: ~ c
#include <mach/mux.h>; t. N) w% ^7 p* J! r
& D; G! u% _- V% T. Y ]#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
m$ d8 w( K* T: P+ G# {) a% q5 h#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
) u+ r& @! u. ^' j#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
9 t8 R; F4 W7 f( W" `! }0 T#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)0 \( ~; H2 I" N! n- U6 q, L. r0 K
7 f u" R! _- L
/* assign the tl som board LED-GPIOs*/% r0 k) D' }& } Y# T3 _9 e% `
static const short da850_evm_tl_user_led_pins[] = {
( k" I9 {, D( _" h /* These pins are definition at <mach/mux.h> file */
% }$ n- m% ]* M0 r% r DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 ^% O4 ~! a2 x: \# Q* o -1
5 x6 Y- u2 e) x5 E};* U: K" m2 `4 r, \2 Z" R! h
& E8 {6 q5 ^2 r. x, Hstatic struct gpio_led da850_evm_tl_leds[] = {
+ h/ O9 }1 L5 s5 m {+ }. i; e! \( F
.active_low = 0,0 }; U1 o. U7 E z( U" w
.gpio = DA850_USER_LED0,% J i- O6 e5 ?/ A$ v+ k. R
.name = "user_led0",
- _0 Y7 Q; |; P$ q .default_trigger = "default-on",
& V* C/ ]- P# |, ?$ J },9 v6 S7 I1 O+ V' E, o
{
& l0 G# N# F6 X% @* B9 ? .active_low = 0,
7 G3 q; ?) G- N .gpio = DA850_USER_LED1,7 [5 z0 P5 e' u% f/ C8 J1 _
.name = "user_led1",
" m2 U" x4 T' A .default_trigger = "default-on",
+ ~, s9 c4 H( J) ]0 x% c, U },
6 ^% i* }- s9 |! r; b {
2 ?1 _/ [4 Y8 X; X/ L .active_low = 0,
' W3 I+ B* r, q( {3 T- G1 w .gpio = DA850_USER_LED2,, S4 `! v( z: p6 t+ y6 j
.name = "user_led2",
: h4 |, x. V9 |! j: E .default_trigger = "default-on",% Y' `; {% ^0 z- g8 e
},' r R% W* V& p( V' t
{
' B% I: a$ u! M% t/ v! K, j" Z .active_low = 0,4 V& j. E6 D! F0 U8 ?
.gpio = DA850_USER_LED3,- {5 p- w/ F0 x; U- V9 d
.name = "user_led3",9 {# T( ], b, H: t
.default_trigger = "default-on",9 H* A2 v/ C0 M
}, t) i/ Z5 a4 j7 A1 _: v: \
};! @, `& q8 J/ k' e: v: f3 t6 C3 z# _
$ V5 R7 p+ o3 q O9 {
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {2 Q* t9 l7 M! s# Y; J1 t' N
.leds = da850_evm_tl_leds,
8 I1 ?' G' a l/ _& n; Z .num_leds = ARRAY_SIZE(da850_evm_tl_leds),; W0 p9 Q$ d6 U" \; d1 g( f: R
};6 N; M% F4 ?! K/ K
: i- A- z& F# V, | P( G& w
static void led_dev_release(struct device *dev)
3 } M& ^6 D" H$ o{5 i+ i% ~# g6 R, G; ~% p
};/ I3 Z+ i8 y" \) I8 O; [5 l0 @
. M5 r4 J5 I" G+ o- b' e, ~0 d# U" [static struct platform_device da850_evm_tl_leds_device = {
+ U4 F/ S: N* O5 K0 x. b. N1 p, o .name = "leds-gpio",
6 W. P1 H# C' h$ k0 B" |5 Q* P .id = 1,
3 P3 H m- N" R: f .dev = {7 Q3 R. r& @; p6 H
.platform_data = &da850_evm_tl_leds_pdata,+ i5 a3 I) N& Z) P* q- N5 z
.release = led_dev_release,% Q# h) }7 o* G* t8 ^' B
}* F3 a* @ c# ]! B; n- i+ w( }
}; q1 i$ e/ z9 P
* |' p: j! @. }
static int __init led_platform_init(void)5 f/ h1 p6 ~) |- p l% C4 f
{
* G0 E# c+ y7 W. l3 m) v int ret;
' p5 p8 \9 I: s! b9 v#if 0
5 t7 v. L' B# S4 E9 k ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 Y* x' F8 M7 J3 ?$ U' [
if (ret)
. _# d9 g3 B j) H6 v5 Q pr_warning("da850_evm_tl_leds_init : User LED mux failed :"$ y/ T; ? c z7 n5 b: p4 `: g
"%d\n", ret);: \5 S" q2 y `5 K
#endif
4 ]% @; z- y& _6 r" m, C ret = platform_device_register(&da850_evm_tl_leds_device);
' h% h6 z$ W; k3 B5 W1 f0 d if (ret): {) t2 T3 n; C& v( H
pr_warning("Could not register som GPIO expander LEDS");
3 u8 N# v9 V: t4 G! t' {6 D else/ s3 }6 x# E7 Z" l
printk(KERN_INFO "LED register sucessful!\n");
! h, Z& C/ _8 k, g. j
# n+ M d$ b- u d8 w: q. \% u return ret;
0 m; ~9 ]* F q: i5 _$ `}+ m: _4 g+ [! G8 q, i
! m) i I$ l" J- J# q$ c
static void __exit led_platform_exit(void)
/ g* h x: Q+ j) b q }9 U{ v* J7 B6 R- M- H7 K
platform_device_unregister(&da850_evm_tl_leds_device);" i4 ]# `: b# C: w8 a* C
" F* E3 ?5 i6 h1 g
printk(KERN_INFO "LED unregister!\n");
7 r( k( j2 O7 y}$ M/ I* K S5 r- |
* \' e- @, h7 S; r& R6 D4 |& \module_init(led_platform_init);' n% @; o2 ~& N7 [3 v% q
module_exit(led_platform_exit);. z: F- T/ s. R) D2 r/ `
) `2 B, F( i: H2 l, o
MODULE_DESCRIPTION("Led platform driver");
2 T2 F1 d, _" m; ^) f" D6 VMODULE_AUTHOR("Tronlong");
' M) a8 P, t* ?) ?MODULE_LICENSE("GPL");# w+ ?& d$ H0 j( ~+ L& w- t, k
) R @ a3 u7 B# x3 |
|
|