|
|
求大神给下面的程序做注解,请稍详细些,谢谢。7 t. c' A h- {8 b% a" j
#include <linux/init.h>- p* p* p$ |% Z/ h
#include <linux/module.h>5 b8 _9 S) K9 e
#include <linux/kernel.h>
. ?2 K: F* Y' z9 r. d#include <linux/types.h>
# f0 r1 d- O( t8 w8 c#include <linux/gpio.h>) C1 y- Q5 J7 H ` w
#include <linux/leds.h>( `+ e% ]1 ~# o/ m8 I3 s& c
#include <linux/platform_device.h>
7 M/ a' o4 n8 Q8 o
/ C4 ]6 o4 \! k" a9 v6 i6 h9 `#include <asm/mach-types.h>% z( J% t5 R! N' _+ F" w
#include <asm/mach/arch.h>) S3 X: L/ U) ?$ H. m
#include <mach/da8xx.h>
( W' U) z" z0 v& E#include <mach/mux.h>
# I, K" r9 o% m% D5 c( m% c
1 O- t6 Z e8 J# y) w2 }" w0 K#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- V0 p% {: S8 o5 }6 t" `
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
, O8 T) R# m# I7 k' `#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
2 O! o. {& ^4 g% u6 w( S#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: |4 T) g. r( p' x: a" r9 u1 s$ @( o/ K7 `- X6 b
/* assign the tl som board LED-GPIOs*/# z! j& l$ K4 B# U2 q8 Y
static const short da850_evm_tl_user_led_pins[] = {1 @/ v/ N& r" |, D3 Z
/* These pins are definition at <mach/mux.h> file */
" j" ^; ]3 P: i1 H" I7 l1 Q* v DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,+ J8 S9 Q7 i4 [3 k0 p e
-1
* V5 X3 G: |1 F7 L. U' d$ i$ B};
* E, [$ q& A' J5 z! Z2 `9 ]4 H
& u; d4 M1 ~/ R: B6 R& astatic struct gpio_led da850_evm_tl_leds[] = {' P2 q& _" e& z, P
{
! g" [/ P3 v5 H0 @, v2 N! S .active_low = 0,
, g j/ m6 n4 d1 ?$ F .gpio = DA850_USER_LED0,4 u/ @( z& C T" ]4 `8 W- U% U0 [% m
.name = "user_led0",
$ {( m, R8 p2 j2 Y5 k* ^2 \ ?% i .default_trigger = "default-on",# E7 L9 F! e: v" G
},, [! W D& f7 Q% K- a8 @
{2 \7 U3 G2 f$ _/ X+ k, p
.active_low = 0,, D7 y, P$ P9 Z; T& i9 @3 d' }# z
.gpio = DA850_USER_LED1,
! G1 f+ h, |# J, J: @5 B .name = "user_led1",
' Q: Z; N# t# U4 o) Q .default_trigger = "default-on",
: @7 ?4 z) K; U8 b& `" o+ g5 i* K, _ },6 u/ F& A# V( z* T+ _
{% t1 z5 i: P* K, n4 R! Q4 T6 \
.active_low = 0,
2 F8 U8 ]( \% _3 \- v3 O7 D- ] .gpio = DA850_USER_LED2,3 F& _' Q4 k* ^- v. }; f
.name = "user_led2",
$ T9 O2 h: @! j7 t% s* w .default_trigger = "default-on",
" O, Z) Y1 q0 X5 p },
6 Q2 J( r! u# A" m5 o {
" y9 O' P/ D; l .active_low = 0,: ?6 `1 d7 z K* r( |) n5 w5 Y
.gpio = DA850_USER_LED3,
" K4 N2 P0 e9 z* | .name = "user_led3",
5 i: A. [2 Z/ u4 A5 ^' ^9 m- F .default_trigger = "default-on",3 g- c$ s X9 P% F. R
},
- H" L9 v$ S/ |4 a4 B U};
- w0 Q' {/ U+ G! S: s6 r2 R p! A3 ], ?
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
9 F1 f: G; ]; x, ~0 ? .leds = da850_evm_tl_leds,
$ e( H+ T( C& t) B .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
$ D9 L. X) K& y& h9 _/ S& I};
; r; q$ B' u3 K7 J5 O# P' \3 Q
) t' z3 {5 }2 W6 Vstatic void led_dev_release(struct device *dev)6 @% @ M8 Y5 [* Z- N \( q
{2 `9 K) [& ?" O" M6 C4 {9 h
};* `# i0 H4 F6 {% E5 a7 \
. e1 Z& z- H# E P/ W: F
static struct platform_device da850_evm_tl_leds_device = {
! P+ {9 t1 I2 d+ o I .name = "leds-gpio",
& x' g" U% p4 ]# T5 e3 F .id = 1,
( E+ k% n3 C, j+ v- O .dev = {
! u( V9 \/ J A$ u( g- i .platform_data = &da850_evm_tl_leds_pdata,/ s3 S! C L" E- c
.release = led_dev_release,
; j% M+ D' `% S8 q$ p! o }
' `* P8 J7 s. M+ C# p5 N! I" y};
7 v5 w) L0 R" f' u( L
& X1 k4 N6 t$ Y# e$ ^9 [6 qstatic int __init led_platform_init(void)
0 l; e2 ]. \8 {8 _" z{
/ ~ n- z! G* V8 g int ret;+ n2 w( w4 J/ ?+ y
#if 0$ f+ l7 M1 a# C6 u
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
! A6 x$ E8 y; T3 v if (ret)
! j8 A, i7 s' b pr_warning("da850_evm_tl_leds_init : User LED mux failed :"! `" i+ B) f: @9 u8 y# x/ U
"%d\n", ret);
- v/ a: D- Q) X* ]4 t. g#endif
. R& F. r' B6 k h4 L, P ret = platform_device_register(&da850_evm_tl_leds_device);3 {0 J/ Z1 f. Z3 \6 _& Q
if (ret)
) T* `1 L9 L9 S$ R( p! [ pr_warning("Could not register som GPIO expander LEDS");
1 H4 H; d& Y( q5 Z8 q- S else
1 E, c6 O9 w% m. C7 [" `$ E printk(KERN_INFO "LED register sucessful!\n");8 k+ D' A7 D) u) V+ {
* Z2 C0 C; M$ K+ M0 g* h0 a return ret;
# [1 u8 z( e9 S}* Y- g" ?9 o; c( Z+ O
1 P9 [ M2 G; v* y: t; e" z+ c" V
static void __exit led_platform_exit(void)
; O; e4 \4 x. U{! [& m! |! |; B+ n T# E- ?
platform_device_unregister(&da850_evm_tl_leds_device);
* _ e$ \$ U: @9 d' F N, ]5 ]* r. w9 P8 C* J, \
printk(KERN_INFO "LED unregister!\n");
/ R( i1 p4 t# }}5 r+ U) u* ?- s& u
W2 `0 J# g4 a# P% Imodule_init(led_platform_init);# T; P- U- @- f( J7 T P
module_exit(led_platform_exit);
" n5 g5 Q5 `# W8 r. R
% I G1 D3 l. u, \/ J& n4 i" TMODULE_DESCRIPTION("Led platform driver");; ^- M, K+ C, K! `- m! ^
MODULE_AUTHOR("Tronlong");5 m( }9 G( n1 ]% L6 I3 D
MODULE_LICENSE("GPL");
0 R% @/ X# C' I7 t! ^5 A+ j2 c" H- x
1 N. u6 T: F. C: z8 a |
|