|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
- [2 M4 h% d% Q+ ]& v# @#include <linux/init.h>
g7 B! V, z0 A' R2 D \#include <linux/module.h>
/ K& X$ k! f6 n) k#include <linux/kernel.h>' f( G! e0 @/ o3 T! M7 T, Y1 L7 t
#include <linux/types.h>" l$ w* S% U4 Q
#include <linux/gpio.h>5 [5 _) v7 W7 _) Y X% r
#include <linux/leds.h>' p8 w2 S, j& g% X D
#include <linux/platform_device.h>9 q5 o. j6 r6 ?" C7 `
* w, ^% Y. q8 v3 Z/ A
#include <asm/mach-types.h>
+ G6 t% \8 R' E: M8 o#include <asm/mach/arch.h>
% d' @& I' K" y' h0 b#include <mach/da8xx.h>9 H ]- f& m: _& [/ [
#include <mach/mux.h>/ F1 N( Q' f; R$ o3 o
: V! u/ d; `- _& p
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)& z8 r% k/ [/ }. m7 U: @- N
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" Y% H/ y+ k/ `6 u a#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); J+ ~5 N# v) I
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
9 D" \4 t/ x6 P: d0 T9 D
% }. u6 w7 w3 K9 \: j c6 Z/* assign the tl som board LED-GPIOs*/
' L" H; d q; z9 G/ a- @% qstatic const short da850_evm_tl_user_led_pins[] = {
! ]. C0 Z. m: ^. h /* These pins are definition at <mach/mux.h> file */8 i8 X! o0 F2 j$ I9 \$ L- Y7 H0 P
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 d5 k: k) ^' k1 h -14 r0 w2 R0 @. y( z) ^7 B. p
};8 P7 D) e; ]8 {, d/ O7 D
7 B6 u7 Z/ g+ g: T/ K% q7 S; z
static struct gpio_led da850_evm_tl_leds[] = {
8 {, r# q" e, R( a {/ i' o4 y# x# {0 ^* N1 B8 U
.active_low = 0,
) U1 T+ K1 c5 w4 W1 y+ t .gpio = DA850_USER_LED0,
3 L! V: h* G7 ~4 F3 d% b .name = "user_led0",
" V g( M1 c, o2 {7 B4 D3 G8 D .default_trigger = "default-on",
9 u( v7 t, }) s/ d A( `& p1 c },3 s2 z: \' s' p$ K5 ?
{
0 E0 M! ^: q/ b .active_low = 0,# y" f# n5 u2 ^( D
.gpio = DA850_USER_LED1,
) {9 r6 z7 ^. N .name = "user_led1",
; N M" |& a* K0 O% a) M) v- D: B .default_trigger = "default-on",
. g* ^$ R- z( n `: ~6 g },
; A8 h9 f# |6 D! Z. E {, ?8 j) g' e! g }! P
.active_low = 0,- g% D! E' l J9 e+ f4 n
.gpio = DA850_USER_LED2,0 ^5 R( ^( D0 j5 D* Q$ ]: b
.name = "user_led2"," O& s8 _6 |, A+ M- g8 B
.default_trigger = "default-on",
" j$ r9 Q' ^, q },; {3 I. d: K* h; Y( k' F! }, J
{
+ ^, ?+ r8 g) i8 R2 @" x/ f .active_low = 0,$ ^/ C, K, }& g2 b) r
.gpio = DA850_USER_LED3,- G- i7 H A: V+ t" I& G
.name = "user_led3",
/ `$ q1 y7 P0 T9 H- I: j .default_trigger = "default-on",! f6 k1 N0 j. J* J8 u, _9 a
},
, I8 E0 N# p, o9 U9 i};
8 ]/ h4 @8 N/ D" @
; {8 f4 R q, s* k/ U7 {static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
* u) y3 r& n- ?6 B' d7 s .leds = da850_evm_tl_leds,4 V& k5 U6 r4 B
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 I) ?/ N" c+ n3 w};
; A3 d( U) G9 T: I& X4 \' e1 @- i, D3 d) M$ R" n
static void led_dev_release(struct device *dev)
: r3 k( l/ Q8 N! c{1 I% G: O7 U. V! h- e1 {5 d
};7 q# z& C# i& d! y8 g- Y2 N2 Q6 O+ y
0 @2 n7 L4 y' Q; cstatic struct platform_device da850_evm_tl_leds_device = {# G0 y6 F. K) d; k$ T% J4 G5 n) X
.name = "leds-gpio",
7 |, S/ U" o4 B* T3 `. l .id = 1, l h0 O: r3 i1 R5 W$ y) }1 D
.dev = {
8 [6 ^0 _# I9 E9 P. q5 }$ u1 c) t .platform_data = &da850_evm_tl_leds_pdata,
- n/ b$ |! O9 y9 z% l .release = led_dev_release,0 d8 ]# a# ]& M/ Q( g1 l- w
}$ ]4 _4 l/ y7 B, v2 ^
};
( y5 O2 ?+ X/ `0 P, [( W: }* o3 H& g* z0 v$ ?' [4 G5 V1 ]/ n
static int __init led_platform_init(void)# P1 `& ^. w# D+ f, f
{
' S5 O9 L0 i7 r int ret;1 [2 Q/ J# ~0 f7 n* _0 w' _
#if 05 \7 e( U* |7 p: a( w# E7 s5 U
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
6 o! B* k8 ]! w# C' ?- [ if (ret)" M l& B# v; W7 Q( T8 I
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"* t1 \" c6 L# \+ T, n/ m
"%d\n", ret);- H2 o" Q% ^ A
#endif
! o* v% }/ Z1 ~0 o9 B6 N ret = platform_device_register(&da850_evm_tl_leds_device);9 `6 P2 {1 h5 s) g7 A( Q, e
if (ret)3 D5 w; @7 z9 P/ g G9 ?: N+ y
pr_warning("Could not register som GPIO expander LEDS");
2 t b2 E% D' O+ w: f' D5 a else
7 I& i! s; Q6 d printk(KERN_INFO "LED register sucessful!\n");# ]$ I4 g/ P9 {) @1 Z$ i
5 [: B+ P# G6 h( \, z return ret;
# ^" Z& p7 o! `( G- X M}
_2 X \2 E4 c: m0 E: R- R( s
3 |( ^6 M9 }; H" ostatic void __exit led_platform_exit(void)
Q! I: O) _4 V{
/ G, L$ }% V5 {) y platform_device_unregister(&da850_evm_tl_leds_device);
3 m7 M( x, T* a* o$ T! {, `8 w3 b. j& t+ ^
/ y6 a; b+ x5 L* e p: B) ^ printk(KERN_INFO "LED unregister!\n");
; p0 V F& Y+ d}" |4 t3 _6 ?; ]* l7 I$ x
9 p% u4 p8 s; d _7 O; U6 K8 ?. Umodule_init(led_platform_init);
/ n7 G, q( X+ V( b4 D; K7 p7 ~* Y" Omodule_exit(led_platform_exit);
& T1 ?/ [6 D, a( b7 k- }7 U% r0 b$ v5 N' I; h
MODULE_DESCRIPTION("Led platform driver");/ L: s3 g- G4 _( n
MODULE_AUTHOR("Tronlong");
: Z7 B1 m# y; o, ?0 f8 tMODULE_LICENSE("GPL");
0 x! m Y, ?& U" V
/ U! i8 X$ c* ]- k- ^- Y$ B |
|