|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
! A; C! c# h% E/ K. T" @#include <linux/init.h>
4 z$ T7 k& c+ K3 v- u, U) Q#include <linux/module.h>3 w8 o( }4 e* ~. f
#include <linux/kernel.h>! K# E! g8 w- D2 s/ \. S
#include <linux/types.h>9 X5 Y1 x: V& O
#include <linux/gpio.h>* o6 R3 `! R6 n* Q5 R- F
#include <linux/leds.h>
" ]. {& C* G* Q5 S( |#include <linux/platform_device.h>
; O6 o6 _/ k$ u7 J2 J- o. M: A5 T4 G. ?. A; K
#include <asm/mach-types.h>6 t) a2 Z+ }2 e; X* V( F. p
#include <asm/mach/arch.h>
6 q x( h' a# Q( l+ G$ j" p#include <mach/da8xx.h>: G/ e" I" `4 B, w
#include <mach/mux.h>
3 U6 q: n* W/ |; E) z% b3 h- b$ Y: c: A
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)" M8 ?" _3 r# d' W" B6 E+ s! e
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
) O, i& Y( u& e7 z% @4 U#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)4 o/ q' w/ V1 T% P3 q, A) {8 @
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
- @% u% [5 x! v0 _4 \/ j7 R$ r7 q: \$ _6 V( g
/* assign the tl som board LED-GPIOs*/
' b" O6 _- M, O; p" S3 ]# Gstatic const short da850_evm_tl_user_led_pins[] = {) y# C! m5 y( p1 X$ G! t8 Y
/* These pins are definition at <mach/mux.h> file */
; G0 |/ [6 K4 B) `; a7 d4 J, z DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* o+ S, K1 V, m/ W6 q
-1
7 f9 F. {/ R$ J* }0 M: @};
" K2 O7 b* O K3 j" P/ q# L z, T: m' l5 q o+ a
static struct gpio_led da850_evm_tl_leds[] = {: W% E9 I/ O) `1 D! U
{5 D8 K+ a9 u, \8 \% _! j) r( F
.active_low = 0,6 L8 S5 `/ @3 b5 V3 k. C
.gpio = DA850_USER_LED0,
2 C7 w" B/ r5 i9 L. w6 F .name = "user_led0",
7 M; Z4 V% Y8 H, B .default_trigger = "default-on",9 d4 H( ]& M! k. N* a
},
. C% L' p, M5 Q {% @' P q4 |( t
.active_low = 0,9 F# R( C5 l/ N+ H7 g$ D/ x
.gpio = DA850_USER_LED1,6 H2 o, \, r, S& T" f. N0 a
.name = "user_led1",5 Q6 c. Q. [# y5 I( C
.default_trigger = "default-on",
; n8 a) m) p3 c f& t p },2 C7 [" z! c; X1 A- Z1 Q
{
+ J4 [$ N4 b6 Y0 b% K .active_low = 0,
. c1 {9 o: T/ }5 y7 F) _ .gpio = DA850_USER_LED2,0 T4 m, g9 Y2 Q% L3 g
.name = "user_led2",
# K" q& n5 f2 S. \4 m .default_trigger = "default-on",8 v& J3 N! n- s. M$ d& @# I
},7 H9 m5 M: E# P" L# C1 a
{
- }5 s* U3 H2 \% x# R9 R .active_low = 0,
: i1 S6 M$ R" l4 p4 P3 ?% ]/ z8 e. ] .gpio = DA850_USER_LED3,
9 V- R' Q1 z, ^$ f8 U" r3 R; ~ .name = "user_led3",% W# Z: B) {$ S) V, B, ]2 m, Z
.default_trigger = "default-on",
% n+ F4 q1 P3 Z% D3 y },
/ G! w' R- {' e};
7 X, I4 h6 Q9 t! a! j
5 s' v, X, U4 O) N/ Nstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
2 _0 d0 t* n9 l& I% |/ K" w .leds = da850_evm_tl_leds,) X% g5 [; n, v+ a5 G8 }
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),9 } Y2 I' m6 w; q% _
};7 w- I# p7 g3 m* |
: A$ t1 V M# b7 C8 e5 `# cstatic void led_dev_release(struct device *dev)
' {- R& Y4 u( O& v) Y) ` K# `{8 y+ |' ^/ B6 C! S) m
};
7 C! V3 [. f* O; U1 V2 s! ?" b8 V- k# ~$ A; j9 g X3 k5 ]7 l
static struct platform_device da850_evm_tl_leds_device = {
( w' ^: L9 P- A5 [2 N2 f% | .name = "leds-gpio",
}! z; Q. a% i$ ~! R2 h0 a6 m .id = 1,. K+ {; u) Y1 F9 j! _9 }
.dev = {" b! n4 k$ @: y0 R- Y$ N
.platform_data = &da850_evm_tl_leds_pdata,9 Y% m# ~6 U5 z. L: p& |$ k4 c. P Q
.release = led_dev_release,
& q% {2 @& K5 O( \! q4 D8 L2 d" v }- }: g* t9 V2 ^/ k5 j) m+ u
};
( I5 U/ j' d- p7 G
8 H) v6 o! j* Kstatic int __init led_platform_init(void)
8 f5 _4 y8 D& S3 r" l/ V{, X& E3 q$ Z1 T% c! _ D. h- j
int ret;' E5 t! T! E: V1 u* t
#if 0
}$ L: [5 e) | t ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);/ z% ^, O* U# s' _8 i$ |) r+ d" a
if (ret)8 S# a8 E( a6 q$ `- b
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"; V9 L" P* w7 }& X9 h5 L; |
"%d\n", ret);
4 U2 v+ f5 r4 n# T3 K) v5 Y#endif! U! }6 @- R m& w+ z% s2 h4 H
ret = platform_device_register(&da850_evm_tl_leds_device);
# ~3 P/ B+ z$ A9 m if (ret)
8 X: }2 _* e8 X& m pr_warning("Could not register som GPIO expander LEDS");
: S% r/ Q% C+ b9 W else
! I# ?" a8 }, ?- Y1 L printk(KERN_INFO "LED register sucessful!\n");
( q R- I+ L2 o
( |7 n9 f' E$ `5 A" m, f; r return ret;
! e8 F) I, N5 @9 H# f' Z+ x}! l, u% m# }4 e9 R& s, B2 B
- `5 Z6 [( D) K. J, ?2 k! j. y* F& K
static void __exit led_platform_exit(void)
8 ~1 G5 n; L8 N9 a, U{
) P/ g( ?& P2 F$ e) p2 ] platform_device_unregister(&da850_evm_tl_leds_device);
" P& ~+ G7 j& {! x1 k1 l
; _( P" P2 T. p1 c$ ^$ k9 j printk(KERN_INFO "LED unregister!\n");5 V: v2 D0 l) [4 O
}# u( W2 Y2 W$ d" g( e; k/ ~& D& k
2 Y: [( S7 d9 y- D) W0 ?module_init(led_platform_init);' p9 d. r5 S$ h) W
module_exit(led_platform_exit);5 p' U, }+ N9 w' h8 q1 C/ D
# ]0 ^ [7 a8 v+ k4 L* i
MODULE_DESCRIPTION("Led platform driver"); ^2 j& q" G% U6 W0 [( K0 A
MODULE_AUTHOR("Tronlong");9 o* a0 z$ ]8 H1 G4 j {; {2 ]0 |/ B, r @
MODULE_LICENSE("GPL");' y% Y4 |1 x7 Z) W8 c+ p
! G; E* y& j; \: @2 | |
|