|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 c( ^+ u3 g8 q#include <linux/init.h>5 O! j1 D4 D' `) b. J6 Y" o9 W! {5 N
#include <linux/module.h>
; V, [0 W& ^6 q, y" R#include <linux/kernel.h>
8 T# l* } K+ p: |$ Z4 S" h#include <linux/types.h>
2 j/ c | g: u% @; T2 a- |#include <linux/gpio.h> ~, J2 a$ ~0 M
#include <linux/leds.h>; r8 X; X X, g2 B9 [
#include <linux/platform_device.h>
6 H |! |1 e, [2 j2 t8 ^4 o$ ~) p9 N
#include <asm/mach-types.h>
4 |' ]1 Q% o, x#include <asm/mach/arch.h>3 L; O9 Y$ K9 X# d5 }
#include <mach/da8xx.h>! k5 L5 X4 b+ F3 N: I& ^0 j# x9 \
#include <mach/mux.h>4 h5 d" ^; h: M% ?
* e4 L: ?, a6 N- D I#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
# F9 K" ?7 @$ J#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
/ e7 x$ {7 F5 k, t$ i#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)8 x$ Z. J1 Z. i0 f9 Z! S6 M
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
2 P. C+ a& v% L
" h/ h2 ?( R" J/* assign the tl som board LED-GPIOs*/
& x, o* C8 k. P! h1 P3 y' astatic const short da850_evm_tl_user_led_pins[] = {
, K" L* {* h5 f- U& `7 b1 y; Q /* These pins are definition at <mach/mux.h> file */
/ ^& ]) Y- h& i- |- J DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
2 X+ ~0 U4 `1 g6 X) o -1
2 K' A0 ?& y0 n4 ]};% ~. S t, O& j
7 w7 s4 j t- X( Y/ O h/ Y I
static struct gpio_led da850_evm_tl_leds[] = {
6 D) Y v) d5 q T- Z) i( a {
1 _! e, X$ x6 s5 O' i .active_low = 0,
4 A, j" d# @, i- \- U1 A& o .gpio = DA850_USER_LED0,
. g/ Z; d; W1 A D5 g .name = "user_led0",
0 E% G/ T w& y+ p+ p .default_trigger = "default-on",% s" S4 f. }' v. a8 s$ h2 M# p
},
& `: x3 J, H2 q/ }+ c {6 e! X. y3 \" F0 {1 `: `
.active_low = 0,
+ C" h4 C, @5 i$ i' w* _1 Q .gpio = DA850_USER_LED1,
1 x$ }& w9 ~5 i& A+ F K; t H .name = "user_led1",0 ?4 Q! m5 r; ?$ d
.default_trigger = "default-on",6 b! |. i; C7 V2 T/ o" y. Z# |% y! o
},
7 K; n" y- k) i; a' [+ g" M6 R {) ~0 \: k! k* a- k- b9 X8 e C
.active_low = 0,$ L9 e2 J" z) ]2 t: s
.gpio = DA850_USER_LED2,
' H _' `/ h" N, @" }5 I! I& o' ] .name = "user_led2",
. u* v+ v) R; l .default_trigger = "default-on",
- O% m9 F* j H- g8 y# v },
/ y6 Z- G! h$ T$ F6 n# Q! y {
: Q3 w1 g, \' K* v* n2 g .active_low = 0,6 I5 j" [1 g9 U
.gpio = DA850_USER_LED3,
' u2 l1 F4 K. B7 O% Z; { .name = "user_led3",9 |: a$ }* r' N
.default_trigger = "default-on",
8 G1 F/ p$ I: A+ x; }; o: u& N w },9 T7 m) j9 \6 i( r3 ?, x" l
};) f. s# q9 @6 L/ ^6 I
" h0 r g$ ]/ [7 g9 j! d9 |6 j# R
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {4 T3 m- Z) U2 A2 d- j2 p; G
.leds = da850_evm_tl_leds,
6 r" i# _; i% C/ `8 q: v .num_leds = ARRAY_SIZE(da850_evm_tl_leds),+ A$ p8 y4 H' r- ~# m
};9 J: _5 _; z, c/ l9 J/ C
0 ^2 C* f' @) W5 t' @2 q+ N9 ystatic void led_dev_release(struct device *dev)5 o( e; T6 W" s% Q- V
{3 u$ x) x1 q9 M/ e" t. }+ E3 d
};
5 {! B/ Y* P( ^& x
( _0 E# g' q% K1 L" B* U2 \static struct platform_device da850_evm_tl_leds_device = {/ C% K+ L2 \8 M2 p
.name = "leds-gpio",! ?3 N3 K. G" c! ^9 m
.id = 1,: S; a" K8 T; m$ @, [
.dev = {
' v/ n* S8 L" r; e4 F; V0 s .platform_data = &da850_evm_tl_leds_pdata,5 w5 g* m3 f: l# r
.release = led_dev_release,% p. D' c. q! y2 X9 w- z
}- z0 w5 h" x( Q7 V' J3 H
};
% M, z, x5 [" O. \% ?9 F( C
9 {' d$ o" `, f* ^static int __init led_platform_init(void)
- r/ _5 J) u1 {* `{+ u% w) s0 b6 a$ a$ F% D* g/ r
int ret;
2 s, G9 z) j. D4 L- C9 k& E3 F#if 0
2 T! N, } ^* G& k+ F! q* p ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
+ S# N- {5 X' W/ `% s7 o if (ret), ?9 D/ c2 p. ^$ ?, W
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
# `9 M( k3 M7 X! h' Z9 m2 {! ` "%d\n", ret);
) Z! r( Q) W: m+ E6 x4 X# w+ z4 _( S#endif7 H* c5 H4 b6 {# `0 m0 |& c
ret = platform_device_register(&da850_evm_tl_leds_device);* K5 M- F4 f/ k3 C1 o
if (ret)
5 [% E, \& u4 I3 ^! D Z& ]' w& o pr_warning("Could not register som GPIO expander LEDS");
+ j) `( ?- K- P0 O$ { else" }+ m/ v4 X! b. a' Q- T
printk(KERN_INFO "LED register sucessful!\n");
Z5 ^" A: T" C" O' w% z3 B
, F5 |, C8 E0 u- j. s# d return ret;
3 ?: O; Z4 K* I4 |/ U" S0 o- u: B1 |}
- \; c; T) ] a! N9 L/ T$ @: h- {3 g; L, `; F @
static void __exit led_platform_exit(void) t' [! E" C! l3 y
{
3 I- W8 ^ v& _- ]1 D1 ?' r platform_device_unregister(&da850_evm_tl_leds_device);
# t. y( E/ _5 f- w/ K) q Q( X7 R( k
printk(KERN_INFO "LED unregister!\n");
( s0 P* b0 c' Q5 {( H, z}
1 ?' h+ j# y, R: ]+ s6 i: a( I! W0 G9 b
module_init(led_platform_init);& m, G/ l8 T! _8 O
module_exit(led_platform_exit);6 N$ _3 M, Y N; b& t8 k0 L
& |8 V* c& I: y+ x0 ]9 U- U$ L& l
MODULE_DESCRIPTION("Led platform driver");# }1 y* ^) d l. u' Y+ G
MODULE_AUTHOR("Tronlong");: w. Y$ v' _+ ]9 b7 {9 P" r* ?
MODULE_LICENSE("GPL");
+ H8 T3 ?- _0 e1 o% B4 O9 P I" {$ A C" \( Q7 r/ v$ \* S
|
|