|
|
求大神给下面的程序做注解,请稍详细些,谢谢。- B* z2 r8 G0 v0 M# T- j% i- S* N3 d5 I
#include <linux/init.h>
- k, C( |% M, K7 B* z5 @#include <linux/module.h>
; k! i1 ~3 B0 ?+ i( \) h7 ?5 n+ Z#include <linux/kernel.h>
$ i" _+ ]/ h" v3 R6 Q6 P#include <linux/types.h>
/ w8 D+ G% A2 ]2 \& u; D1 ]#include <linux/gpio.h>, ]( @5 |* X; k' ~8 V1 Z
#include <linux/leds.h>
- a# I- e$ M. ]! c( B. ~5 G#include <linux/platform_device.h>% |2 i0 m) \7 q; @( f b4 ~
0 r; U$ j& O8 B# S8 Y0 X b ]
#include <asm/mach-types.h>7 e0 J0 M# x( I2 z* e0 m0 R7 R
#include <asm/mach/arch.h>! K: m+ V, `5 _( o' P4 x2 @
#include <mach/da8xx.h>' e) \* \0 C, e, t8 m9 x( D
#include <mach/mux.h>: d( e9 w6 W Y" ^6 H J1 q
! M* M" W8 Q( ?# I8 q#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- [( O' M" k/ y# ^
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
; `5 m m+ o/ G, e( F! x#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 u; r' u: q! O& @) G#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)9 ]7 A; p0 d' q/ b, a: e
) y1 J* r1 O/ K2 M/* assign the tl som board LED-GPIOs*/
( {) E9 `7 j4 \8 L4 ^8 Dstatic const short da850_evm_tl_user_led_pins[] = {
; ?& T. I. O) ] /* These pins are definition at <mach/mux.h> file */
% ?* J0 v7 r' H) v$ n DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, U, P) d# Q2 U. o4 y! g2 y" L -1
7 u. z2 {8 P* O1 L% ^) b! K7 @};
. T# i+ F4 I! Q: e) s& s3 U5 d. A6 N# c* |5 E2 K8 z
static struct gpio_led da850_evm_tl_leds[] = {
6 g5 E f# ^5 b7 F# I {
* [8 H/ ^! C5 X' _* c$ A .active_low = 0,- `2 [7 x0 a& y* r! Z5 T1 }8 ~& y
.gpio = DA850_USER_LED0,
7 X6 R, G, G; i. q' f0 r4 w .name = "user_led0",6 E' y1 T# c& V% O0 |: I" \) o
.default_trigger = "default-on",
9 g' V6 \+ i* ]' L$ B },
1 m$ T' \! p y9 d% K6 \ I z {
6 O/ \* ?( z/ z* `: K {5 ] .active_low = 0,
' S9 s+ J5 j6 J. E& l; I, B3 ?$ j .gpio = DA850_USER_LED1,0 E, a4 W, `& l' O
.name = "user_led1",! |" g; X n! v) n: u
.default_trigger = "default-on",
+ s. r9 E( ^5 C5 z },
1 ~0 F* ^) K" x {
; b- ~' z B- p$ ` .active_low = 0,
) l# M6 s G) H7 u+ v9 n .gpio = DA850_USER_LED2,
2 O- d, ~ F7 {+ f .name = "user_led2",
. @" ^+ {8 Y- G" q) p8 ? .default_trigger = "default-on",6 _. \$ \, o1 ]; ^( D
},
. [1 B. A9 G- |! q5 w; M {; ^+ }; u# ~" _; h$ h" Y
.active_low = 0,: h" y+ Y! u; j. ^! ]
.gpio = DA850_USER_LED3, P2 q3 M. J8 u; i; C
.name = "user_led3",
- {, |" |/ y p* F .default_trigger = "default-on",: l, z7 M+ ]( |
},
- Z; o1 w9 g! W3 c' g};4 X, t- y5 |( Z! z/ I( \ u% p
5 U2 P; d# Q3 S- E
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
3 y7 E+ ^! f' I$ p% S; _5 b* M& B5 _ .leds = da850_evm_tl_leds,
+ }2 U( S+ Y, d4 ~) B7 r- ]$ y .num_leds = ARRAY_SIZE(da850_evm_tl_leds),* o1 h% i; A; O2 M( o. D0 C
};
8 K4 J6 M; [, @1 _- E( S
9 N8 f, b5 q; G' Bstatic void led_dev_release(struct device *dev)
3 X3 [7 z0 g' ?" z/ ?% E+ Y{* g2 Z7 X% D! R" A. ^
};5 w+ q, q% N* I' o% W& z2 t
- U7 `% k; o' s: b+ m
static struct platform_device da850_evm_tl_leds_device = {
! }4 K' A1 Q) F. I$ W .name = "leds-gpio",( Y7 m9 d/ G4 H7 K8 d1 {3 \
.id = 1,
1 k/ m& y+ ~8 [ .dev = {
' _( v+ }& u9 C. e* a" H .platform_data = &da850_evm_tl_leds_pdata,
+ n: z* t2 H2 B' { .release = led_dev_release,
& w6 c# r* ~* u7 Y5 r9 n; m0 f7 R }
4 |- e" A. y) H0 b- a z};5 [" e5 W- g8 B* W$ c
9 u" P8 a) W, t' Q Fstatic int __init led_platform_init(void)
" a9 X" a7 [: l2 u8 H* }& Z7 Z{2 h# R8 v6 @4 _- N5 p3 p& v# y4 V
int ret;6 `* l) d8 F3 G W @% h
#if 0
' o5 f/ E9 c) ~* x' V( K ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
5 t; h" D7 Y# M" S if (ret) O4 k, U: g% v+ U
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
" W/ W% z+ d7 b0 _4 J4 C "%d\n", ret);! Y9 E: z. E5 i9 B. s; o
#endif9 |5 n& L; F9 D7 l5 [- E) u$ i
ret = platform_device_register(&da850_evm_tl_leds_device); }& v2 ]8 g0 f9 C" d7 O5 H- u P
if (ret)( m7 L+ \5 y- f% W( _
pr_warning("Could not register som GPIO expander LEDS");0 t# y) f d9 m" R
else, ~" E) \% p @* Z1 A9 P
printk(KERN_INFO "LED register sucessful!\n");
, M7 R T: p, T' H$ N+ P# p9 ~& ?, G4 A* s. [
return ret;% [, Z7 _. A: \. U
}0 U/ m' @$ I6 l, T" x
: ?- n. Q7 c: f0 j ^ bstatic void __exit led_platform_exit(void)5 R3 L$ d) X! q7 q" {
{0 S5 I/ y( i+ Y
platform_device_unregister(&da850_evm_tl_leds_device);/ y% z. E3 @( u& c
2 g( b% J- `# j printk(KERN_INFO "LED unregister!\n");0 @$ E5 O9 P" u9 V) @
}% ]' h2 {4 w+ t( L
5 G2 K, G+ I5 g- g5 i/ C, P
module_init(led_platform_init);7 |+ V! u* L" G* k, d
module_exit(led_platform_exit);, E# A1 F: a9 W. O! L' I
" X) q% q* V5 PMODULE_DESCRIPTION("Led platform driver");% c, k7 C- i% d/ w+ {
MODULE_AUTHOR("Tronlong");
4 c& {3 {, M; x0 xMODULE_LICENSE("GPL");
8 O, k) ?; N: ^" v- r Z3 L# ]' c0 l3 j- n+ R7 p* O& p$ ~
|
|