|
|
求大神给下面的程序做注解,请稍详细些,谢谢。1 W8 h7 e( ?0 r; U7 P" b
#include <linux/init.h>
) ?3 {3 M; r! g; }+ F5 m#include <linux/module.h>
o) K$ Y- l5 w& R! l: D3 B#include <linux/kernel.h>& `3 ^3 `" A% X+ M2 }
#include <linux/types.h>; Q! j/ e6 I3 c0 k: D, O7 k ?6 f
#include <linux/gpio.h>' U5 R, y. d5 U$ W' i
#include <linux/leds.h>
t1 x u8 u% p+ Z3 h5 \#include <linux/platform_device.h>
4 F$ O- O7 L) b- C6 z9 k# ]/ a+ ?, B/ b8 E
#include <asm/mach-types.h>
/ n$ Q5 G" ^8 z) s1 T9 o#include <asm/mach/arch.h>! t v9 ?- H0 d4 C" O
#include <mach/da8xx.h>
$ a% P; L$ k) u1 V E" s5 @#include <mach/mux.h>
7 u& _7 T7 m0 l9 q0 K8 J) M
0 t/ O. Y/ c. l$ M; c. Q#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 D* f! ^8 u0 W: b9 D* B1 j#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
6 u0 N2 k7 {6 L' n8 m#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
: L9 ]3 W5 `2 {7 r. h; x3 Y#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
/ @0 T- F0 }3 ~, y( E7 o0 y/ |1 r" v5 I0 ^8 Z5 ?+ }- m
/* assign the tl som board LED-GPIOs*/
' _, Z0 a0 @4 k7 v, e, s# ~# W! R8 ^5 ustatic const short da850_evm_tl_user_led_pins[] = {
% M& w4 o) T! e3 J! I3 [5 R /* These pins are definition at <mach/mux.h> file */7 q+ U! i8 e/ }" t: D& x
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
% u0 R: u+ [9 A2 `' y* R8 o -1
7 d5 K& \4 g/ U- D9 ~& z# n};+ L" O5 u+ S: f- x
6 S* N4 l+ N& Jstatic struct gpio_led da850_evm_tl_leds[] = {
/ O' Y7 _5 L% E! \" H/ M3 E1 v {
& K4 m' w7 e$ v* C4 _ .active_low = 0,- h4 g2 c+ x- q7 e. R1 U7 v# D
.gpio = DA850_USER_LED0,
% q, I1 s- `" q' X4 { .name = "user_led0",
+ v a9 o3 w, k. s2 I k .default_trigger = "default-on",, O1 X% j9 a* c
},
) e6 ^- X$ v/ u0 ~7 n {1 c+ j ^ m* v) r C/ B, ]5 C
.active_low = 0,
( Y8 _" }. S# e( U$ R .gpio = DA850_USER_LED1,+ t$ Y( j6 ` S B* v
.name = "user_led1",
! m& i3 m+ g" N5 m: ^1 } .default_trigger = "default-on",
7 y4 _/ p+ p3 e; p/ T9 [ },* V" }* R/ P M% g- u- A
{
6 d" H0 d, @; F* B3 F/ {! K9 V .active_low = 0,
6 r" l N1 u0 W8 U+ m .gpio = DA850_USER_LED2,
0 I6 p. v% Z# f. h, D. J6 q9 k .name = "user_led2",
- i% O* }& ~* T# {5 m+ E( I .default_trigger = "default-on",
. _/ I; K& C/ e/ q },
3 ]( R! T/ B5 }1 O5 v* S+ S {5 @5 |, a5 Y! P3 G, k, V
.active_low = 0,
, Z3 W% `3 U1 j .gpio = DA850_USER_LED3,9 W7 Z% G z- f, }# c
.name = "user_led3",+ U1 {( L* q) n8 V) D
.default_trigger = "default-on",
, }+ u6 R# A" E) \. T! a* ~ },
, N$ H s: ^; P6 m3 b};
2 W3 E9 f2 ?# X {: B9 M9 E4 Z l- q( M" V/ y% D; X. ^ {, F
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
/ K p- D* B1 E# K/ U: I .leds = da850_evm_tl_leds,
1 u5 C q5 e) s& { .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
# B2 D5 n5 L* s$ }1 c% `};* }% @2 `; R: r1 a
" @ T# r! @* V1 L- q' x& }
static void led_dev_release(struct device *dev)$ J) E/ g2 F# B
{& I$ ?' V, ^* K. ^
};
. d" K) W5 Y' k0 i3 Q( o0 G" q3 a; o4 U& h X
static struct platform_device da850_evm_tl_leds_device = {6 U" f9 y+ a ^, p4 Z+ v, G
.name = "leds-gpio",
8 p* {) R* x* \ .id = 1,
5 C9 H. z. w. x0 v+ D/ h, D. T7 Y- q. u .dev = {
/ p' M. k- B4 D# \$ V0 N .platform_data = &da850_evm_tl_leds_pdata,
' A" u0 }+ i5 i8 E) D% g .release = led_dev_release,
$ a0 M6 S. D/ M- q7 p, l d6 s3 ? }+ D3 [2 p7 e, f; c5 R) ^6 ?4 l
};
3 t. V6 J$ q7 I9 }
' n, i: k! e4 L7 u" {, Y" A2 Estatic int __init led_platform_init(void)
- F4 d2 @0 A0 K9 Q' a/ A{, e* [7 `& ]" f, R4 t: G
int ret;
# J. `. j6 n6 d( W& o#if 01 H8 |/ D) i4 R1 M* `( k; B" U
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);* s* {8 [0 w- t" j/ x7 e
if (ret)
: r0 `+ M8 j1 d$ } pr_warning("da850_evm_tl_leds_init : User LED mux failed :"3 E8 Q) }% D5 z. y$ R
"%d\n", ret);8 U% d# p2 r; g' a' U1 f
#endif
; h" v @8 b2 `. G, Q" l( [ ret = platform_device_register(&da850_evm_tl_leds_device);
! W' k' y$ b4 F& N. h; j/ l if (ret)% A# N6 T% D' J w/ U' l
pr_warning("Could not register som GPIO expander LEDS");
6 P# i% l( i5 u! b4 k' B2 P$ D else
, |$ j1 J5 l+ }! E printk(KERN_INFO "LED register sucessful!\n");
4 B& {9 [' q9 K3 [/ G m2 @
0 `3 U+ Z2 R, M! H! \ P" P4 B return ret;
, y- J6 K9 V5 g* I8 x& v7 r- d}- p) C8 Q% H5 c" L6 S& t) ~
" U! C7 E: I; I. Ostatic void __exit led_platform_exit(void)# ?, O6 A' r. \4 m4 |9 j
{
, y) \ b/ [# y platform_device_unregister(&da850_evm_tl_leds_device);
/ P6 N9 o7 u4 }* k# ]! `
. O) k3 D# V" S' T- _; t' y) W" s0 j. Y printk(KERN_INFO "LED unregister!\n");
: t) d" t2 w! f* e5 x0 m}. r: M% h+ O7 E9 ^
9 B& H7 q) x) T, t' c3 T) q+ tmodule_init(led_platform_init);
9 E- k( m2 e8 ?+ A; omodule_exit(led_platform_exit);
5 D% Q+ {) X* M4 H9 ^0 Z
9 T8 o4 x0 k/ ^" j" \MODULE_DESCRIPTION("Led platform driver");
$ y0 t5 t2 O3 B7 hMODULE_AUTHOR("Tronlong");
6 O. ?. ~) N' R2 X/ e* h* i$ aMODULE_LICENSE("GPL");( t& i0 u$ N. ?
# f$ W) }7 h8 ~
|
|