|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 {; L5 h) y( T
#include <linux/init.h>
# C. g5 k0 @# C5 { B1 c) e+ j#include <linux/module.h>
' c* t2 T" E* O$ q#include <linux/kernel.h>
/ R6 \$ b* A& g% p: U#include <linux/types.h>! C: O/ ~: m# s) A7 i9 P' K
#include <linux/gpio.h>/ q' o5 F$ C8 j( K( W i9 {$ c
#include <linux/leds.h>
: ~/ N$ V# ~7 I% x9 f/ n. F#include <linux/platform_device.h>; f- v2 v2 f% E8 X0 B
" q7 m" I1 e( o; b+ W/ D0 f
#include <asm/mach-types.h>5 C7 `( j- k `4 Z0 c4 S' X `
#include <asm/mach/arch.h>
3 w- s$ n/ X1 C" k7 ]+ X#include <mach/da8xx.h>
; _; u: @$ r" W" L. L#include <mach/mux.h>0 C% ?0 o( V3 R
. O& x; u6 B3 b; I. o* e
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
6 G) l& |8 ]: X9 i#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)5 M8 I" N$ I* t
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1). M! b/ o+ E- C7 `0 G% I$ B
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)6 N) K& W9 o/ y( Y- F
" U a7 J) K1 t8 x) c9 O( Q/* assign the tl som board LED-GPIOs*/7 U) s- s" e- |" a5 @
static const short da850_evm_tl_user_led_pins[] = {
( M) a6 M8 A4 ~8 x' b /* These pins are definition at <mach/mux.h> file */* J( j v6 q: n6 w9 V2 S
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
m! \ a8 N. m/ }) b) f -1
$ I; r, }+ _! k: u4 H. N4 e$ n};
: I( H$ N6 }: Q; r- ~) p
+ I+ T" ]# _4 [( m1 y2 M& Ystatic struct gpio_led da850_evm_tl_leds[] = {
, o* p: h2 V+ q3 i- I. G; O# a {
; l1 a W$ C3 l, i# h .active_low = 0,
" u' }8 A2 @) Z& t' w1 c( x" | .gpio = DA850_USER_LED0,/ j4 F, x" j7 ~8 l1 R) z6 A6 K+ w
.name = "user_led0",
/ [" ^1 A* ?2 j. i2 |- s .default_trigger = "default-on",
1 I+ [7 u" E" {7 R* T1 N },) o/ [ {0 i2 d: R/ N) }3 y
{
0 p* j0 l1 p1 V; B6 [# { .active_low = 0,
4 u% r; E) M7 r0 f/ W* F .gpio = DA850_USER_LED1,
4 J1 y2 Q' F4 v .name = "user_led1",
* Q6 K5 h3 z$ V$ s* }& l- G" q- N .default_trigger = "default-on",
7 ?% K% n: Q8 U1 m0 E: {3 K },5 m% P, x. O! i t, k. b
{* T; t; I* k. i/ c' c2 c
.active_low = 0,2 M0 p& G# N/ T
.gpio = DA850_USER_LED2,
" F# e1 n9 T4 Y, V9 z .name = "user_led2",7 D' f* {3 t0 s, ^
.default_trigger = "default-on",
3 a4 x# r6 b8 i# T },
0 W2 Z+ S9 V+ W$ [# J {
) c+ M% |# U$ O6 Q7 A .active_low = 0,8 W$ a, T/ f7 A- v
.gpio = DA850_USER_LED3,1 J. i- W6 X& H% {. G2 r
.name = "user_led3", J* B+ r! I2 h# |- x
.default_trigger = "default-on",% x6 `* G6 A+ t' @9 @/ y
},
r( \4 D! ~# ^% w j0 m+ D( l};
' J* K% P/ b0 }& y
8 L6 v: j; u: k$ M$ M) ostatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {, A3 {( t+ u) _ Z5 z; ~
.leds = da850_evm_tl_leds,0 l( n# [* w8 o6 t* e
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),! z# Y w: T1 C' ^
};. J" W3 Z7 q9 q6 G
" ^' j7 P Z! H
static void led_dev_release(struct device *dev)
' `' A! o4 `1 h{
7 H* Y9 Z' B" Y1 l9 j+ ~# d};
) g' H' f2 I" n8 r8 p6 W
$ V7 P$ ^; t5 @* e& hstatic struct platform_device da850_evm_tl_leds_device = {
3 {9 q9 o g; w/ n+ B1 Q .name = "leds-gpio",
) s& J* e O: p# E, q& i .id = 1,
1 Z$ n- k; M' x) W7 U' N, L! d .dev = { C2 W8 T7 Z' _3 j5 f
.platform_data = &da850_evm_tl_leds_pdata,1 f' ?1 v b( S8 v+ s7 t& ]
.release = led_dev_release,9 F) B! r- {$ Y0 ?- V* p
}
# G' e0 a a& Q) `* }# R};
- W- D# n ^* Q* Y1 K4 h; j- K9 N% W. b7 ^% p- ^: E
static int __init led_platform_init(void)- ^8 T) z- Y' @
{7 a$ C- W! @& S$ @
int ret;
2 O2 b1 s! A# I L, N' J! I. }#if 0
2 E2 v) B: q- Y" r( u: P ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);. q# p+ z5 h. S- E$ Z
if (ret)* p3 R1 \, M a9 @
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"9 z5 s F% |# T% |
"%d\n", ret);2 A! g. w/ H2 }/ L9 t7 h9 R9 X
#endif# V/ ]# i* x4 j, X9 v
ret = platform_device_register(&da850_evm_tl_leds_device);
' R2 S) m- Q4 e a7 q/ W3 t if (ret)
3 |* t+ O3 l d; y pr_warning("Could not register som GPIO expander LEDS");
* C2 W) q4 F9 v+ S4 g else
( L! I7 j1 w. N/ p printk(KERN_INFO "LED register sucessful!\n");* v5 |$ q# } T z* p- I
3 @" l) i4 s+ Z _1 H: y return ret;
3 T7 ^8 j5 t5 d2 |+ d}
3 y' c( {! [* D, j3 H% w( _
+ ?$ `3 M* e& A4 Jstatic void __exit led_platform_exit(void)
( P% s- N; S. U6 L. V7 s- o{. l2 F* j [5 D! b! O) w( Z+ G! B% t
platform_device_unregister(&da850_evm_tl_leds_device);
. [8 d9 d5 t8 R
+ Z; b" w" ^- F- {) i& c printk(KERN_INFO "LED unregister!\n");( I% K! I' h& y" v2 B* m5 U
}; @0 P5 |, z5 k% N, O
, z9 E1 D& q+ {8 y/ @( J. Smodule_init(led_platform_init); T9 _0 u! [2 g! T: r
module_exit(led_platform_exit);
0 I7 W. Y0 M# r Q- \& H) u
% d5 [8 A- s; f# F0 O7 BMODULE_DESCRIPTION("Led platform driver");. V2 _ o7 N+ ^8 V$ s
MODULE_AUTHOR("Tronlong"); d- [- I1 v( N. I. f! |1 u
MODULE_LICENSE("GPL");5 n+ }# K% T" ]- U8 ]/ `
& G+ F, s, w3 n" [ |
|