|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
3 r7 u" a/ z1 ^; j* s; C2 x- p#include <linux/init.h># W+ j, j5 f K' L G8 K
#include <linux/module.h>1 d( \1 V, |; ]5 V
#include <linux/kernel.h>
* c0 T8 z% g, Y+ C$ v, y#include <linux/types.h>
& R c0 C) U, p- {1 \! q; c#include <linux/gpio.h>
" a/ U3 G( A! t# G% v C; [#include <linux/leds.h>9 w& s. V8 R2 \7 c) y) U' s* d; d# ?
#include <linux/platform_device.h>
- j2 y/ d8 J0 W9 `/ R7 f) t3 J1 _$ w! g- f
#include <asm/mach-types.h>
& {9 Q5 W6 J9 |5 p3 z( ]4 e7 S#include <asm/mach/arch.h>( O X u+ q, d( p" i' Z6 R
#include <mach/da8xx.h>
% T5 p3 h+ z& m; D3 h+ d#include <mach/mux.h>/ w) P9 Q/ M- E- b* b4 M3 t
# ?7 X% d' G X( A# x8 Q9 Z6 c
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)# Z7 ^& e0 _4 G M, Z' L: `/ Q# `
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)' ?! V, n* r M( E, b
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1): u/ z" h/ [" x- e& ?
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)" s7 N6 q% A9 @, k3 w
E& ^ c7 b7 S& ~6 z* f/* assign the tl som board LED-GPIOs*/% o7 A6 R# L0 v* _* _
static const short da850_evm_tl_user_led_pins[] = {' A. p M# b0 W. A
/* These pins are definition at <mach/mux.h> file */, }1 u9 T9 k+ ]7 X
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
! [- r& G% T4 y; A+ E; V -1
8 d# H9 u" A% r7 T5 F9 L" q};
2 q+ M6 x z4 h% v# _! P: U9 r* A3 m8 d" y, v
static struct gpio_led da850_evm_tl_leds[] = {
8 v! b& R7 G+ m( D1 a {; \$ x# x/ j7 t; E6 l
.active_low = 0,+ ^# q6 i9 o0 v3 ]. P
.gpio = DA850_USER_LED0,
+ ]9 Q$ \. v. A% r" N# E .name = "user_led0",
0 r+ T( l7 i# e' V8 J$ ? .default_trigger = "default-on",
1 l! C( o) D4 S; ^9 w( y9 \. S },
& |( H w6 E; P( Q) J {
5 g# o5 N% Y9 E5 ^# e8 _8 L5 p .active_low = 0,
) v1 I. O1 e8 h5 r v8 U: T .gpio = DA850_USER_LED1,
, N2 x' q" K) s& U1 @: ]) e .name = "user_led1",
: g- { j" c2 E4 J2 n9 d2 O9 L .default_trigger = "default-on",. E2 j8 K6 P1 F* o
},
" ?, Q! }( B0 \* H3 ^# E5 k) E' \- G8 O {2 t# ]$ s+ `' C) _$ |
.active_low = 0,
0 a6 b" C* d, j .gpio = DA850_USER_LED2,
4 g7 H6 g" Z# a) v% N .name = "user_led2",
4 ]: w; b- u T, ]( g0 q .default_trigger = "default-on", X; c& U( `+ C4 o- ]9 t; X
},- q ^$ M! V+ N
{
' P. \3 f$ F5 J7 O. ^1 x/ I' c .active_low = 0,4 e4 P' B* M0 a( K+ U
.gpio = DA850_USER_LED3,
7 t" }' E4 }4 D- a .name = "user_led3",
8 M0 n! F7 _( A' t6 ^ .default_trigger = "default-on",
7 Q! s# [& w& |8 d6 m },
6 p6 e- {) n6 W3 z9 g};5 `2 D( q- _) a+ b7 F1 O
; ~1 a+ ]! c% w) `4 t* lstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {$ S1 {/ }; R& {2 x7 f
.leds = da850_evm_tl_leds,
- X( a. c- u1 ^4 \0 W$ | .num_leds = ARRAY_SIZE(da850_evm_tl_leds),0 c, m! ?, `2 x) i; X1 B
};
0 v1 {- Y, k" L' y% ]
, Y- j8 d/ N0 kstatic void led_dev_release(struct device *dev) ]7 n! q, x6 A% B
{
, @" E5 t! B: Y};" T+ v- n7 R* }
2 p4 F3 e, Q; G1 Y3 N" [
static struct platform_device da850_evm_tl_leds_device = {
8 t% z$ ]: Z- g .name = "leds-gpio",' Z$ E- z2 b' g
.id = 1,
^# P H! i4 H; w0 x5 ~4 u1 f8 B0 j .dev = {1 I3 X& Y5 G: I% C
.platform_data = &da850_evm_tl_leds_pdata,
8 S' g9 U7 M5 q' g .release = led_dev_release,
/ i9 `# O$ |5 Y/ l }
# _3 `3 c9 P# p/ c |};
7 a( K: g/ H8 x# O! A: r" M# l" d4 a5 p; A% y0 K3 i+ }
static int __init led_platform_init(void)
- d7 L, I( E Y! O) H" \{2 }. {( T* k8 S' e: D' e
int ret;' {7 }3 _/ X7 K2 n
#if 0; @- _6 ^7 n! z8 ?. V/ y1 s9 a
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
% \5 s8 @" }& e4 ] if (ret)
% `8 t+ H. z; a; X) [3 W3 c) y pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
2 o$ Q: X2 A3 y. Q( O7 n S" \! Y "%d\n", ret);, D1 W k- Y/ i# W5 ?! s
#endif, i% ?% Q% A* r% s- G
ret = platform_device_register(&da850_evm_tl_leds_device);$ a" e- f$ t% S; s) }+ {
if (ret)- h! A: C1 q- Q) Q4 K5 s
pr_warning("Could not register som GPIO expander LEDS");9 a8 } j& h. p) [; M
else* n5 {+ g1 A( X1 u$ i
printk(KERN_INFO "LED register sucessful!\n");4 T1 P" q6 M' p4 j5 m- q; w% k# T
- ?3 s n5 Q% Z# S9 ~5 N return ret;
6 _' T2 G' M+ J) W}% w2 A4 C) F2 q- u% n9 V6 c* N
+ |8 |- n) q4 `static void __exit led_platform_exit(void)
: q, a% H$ n3 F9 K: J, a- v{7 {4 ?/ t- o, `; |% v! w
platform_device_unregister(&da850_evm_tl_leds_device);
. I0 l/ c2 {4 B0 x' ]' ~( c
% P$ f% I8 [+ q0 D7 @+ k6 }/ D! ` printk(KERN_INFO "LED unregister!\n");
) E9 I% B9 C0 P5 }# c}1 L) _0 K6 L) o* c
; ^& P. r$ T8 X; K" u7 W o% qmodule_init(led_platform_init);
. E' V7 {# N* Z- Kmodule_exit(led_platform_exit);
2 _( N# h. \, _% Y
3 v$ S/ A/ l, T. Q1 ^- v% s! m- F/ jMODULE_DESCRIPTION("Led platform driver");
& G5 y. Y2 o* I. v' | l% ^MODULE_AUTHOR("Tronlong");$ y( ]6 J+ z9 G$ R/ \6 }- t7 H
MODULE_LICENSE("GPL");- M/ G2 D0 W( |9 ^# T
- A2 C3 v8 |4 T5 R3 d8 i
|
|