|
|
求大神给下面的程序做注解,请稍详细些,谢谢。+ P# Y0 Y3 s6 V& l5 e
#include <linux/init.h>
* ]( ^( x: T' k( P/ p3 ?( R#include <linux/module.h>, w3 N/ _# o d n" R
#include <linux/kernel.h>& f. a, o( _+ [
#include <linux/types.h>! U1 [2 r) s6 P/ M
#include <linux/gpio.h>
% J( f" O/ h1 _; O X/ R#include <linux/leds.h>
2 u1 H& |. w& {: J: O6 @#include <linux/platform_device.h>3 k) w$ G$ d1 g) i+ M( _
# |) H& Q! i" ?1 z1 i d. V
#include <asm/mach-types.h>) p2 N- G9 n& N8 H1 Z: N
#include <asm/mach/arch.h>
2 R( G! D: g+ [2 ?- k( A5 x/ Q#include <mach/da8xx.h>( R, n( u* z& E( {- s4 i, C' X
#include <mach/mux.h>
# Y& n+ T& G$ ~4 T
3 O7 x$ M+ ~$ ]#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
6 }- [' Q2 w, o8 s u: d8 s#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 N1 U9 F9 X8 c" P$ m& X N+ v#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
. Z8 y+ f) U& A8 q#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 h& R- x; h" a7 G. ^3 p
! |: z' @$ Q- Y& ?
/* assign the tl som board LED-GPIOs*/1 T5 p1 e8 r6 [) A- a* x% s6 T
static const short da850_evm_tl_user_led_pins[] = {
$ ~$ B0 {% j% }/ d$ A/ |. }4 q /* These pins are definition at <mach/mux.h> file */8 @, n( o7 c! W9 f' v3 z
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,2 w( }& \( D% ?5 o2 K8 _) W
-1
$ t7 D' `( {+ b};
. P& D; R: B. J
# g5 ]' N$ Y# O- w7 _static struct gpio_led da850_evm_tl_leds[] = {
9 H4 V! x0 y8 O" _ {) T! r+ {6 ~. d4 B: Y3 T0 _
.active_low = 0,% A( G5 R: v; G
.gpio = DA850_USER_LED0,
' o/ R1 g3 C, l7 a0 e4 n7 G* U% ` .name = "user_led0",
! ~6 P" a. |+ K0 l- \( o .default_trigger = "default-on",
0 e) t5 p9 P" k3 }7 p1 u }," X& J! Q4 `7 z8 Z0 l% k7 t1 h
{# h( ~$ p7 {4 @1 @1 N; Z+ k1 w$ h
.active_low = 0,0 K8 E5 T0 q/ c: F
.gpio = DA850_USER_LED1,
* g: p) Q1 h) r; @# O# E .name = "user_led1",9 e7 S. P2 `1 S% G" n
.default_trigger = "default-on",2 p) T _+ _9 `8 y3 n8 O
},: A" v2 o1 ?2 _
{- U2 p( S2 i5 M. O z
.active_low = 0,
8 x0 X" @0 a6 w g! n6 M: C .gpio = DA850_USER_LED2,
3 @& Y' i: k3 |1 N0 D .name = "user_led2",# ~9 K- ?6 i: d5 A
.default_trigger = "default-on",
9 @! G+ X7 w' o9 K, R# w5 N" N },, R( ^# l8 Q8 D* I& v- D s, _
{! e6 K! A1 x q' r) k8 u5 @$ @8 B) a
.active_low = 0,, P7 w1 s9 E. t. `; q! {+ b) v
.gpio = DA850_USER_LED3,0 F4 f/ M: w$ j$ l7 X% H0 U
.name = "user_led3",/ l" R) p( [% K j8 w/ [5 P8 b
.default_trigger = "default-on",9 D2 w% L2 o' ^. H/ r
},. K' c9 \! z& D# D
};
1 W5 G+ {. `: _. g
7 k4 F( }& k. n8 Ustatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {- Q' h% s; d" Q
.leds = da850_evm_tl_leds,
( j: t4 o4 G2 m' M' a0 ~' k, C .num_leds = ARRAY_SIZE(da850_evm_tl_leds),( ]4 m5 z7 \0 T9 J
};
/ r! b% E% h- E3 z# L& ]9 v) ?$ ]
static void led_dev_release(struct device *dev)9 ?' T8 b; \! d) {2 V, y- |
{
4 ]. n' z& q9 ^7 B! i3 J+ n8 \1 a};
0 m" _1 f8 B3 g; \0 z4 {& L) D. E
, m, @9 B& o; r/ L8 P* Mstatic struct platform_device da850_evm_tl_leds_device = {
6 ]3 t3 O" J! D [, j .name = "leds-gpio",! S' k# V5 K( {6 @9 w
.id = 1,
1 D9 }, q# [ X( L .dev = {
& S) i' G/ ]( u* `. K .platform_data = &da850_evm_tl_leds_pdata,
. ?7 x4 v! k- t @ .release = led_dev_release,4 K& h$ e; E5 ^" k
}/ ?/ B' w4 o9 D! }! Z; g* a
};6 w4 o! K' b% @9 f( Z
9 x5 N) a$ A! W6 ` _- x
static int __init led_platform_init(void)/ Z$ q; B. Q \
{! `* s4 ?; ?# c( N: Q' v( A$ ]
int ret;
$ ]* o. x4 \: W7 Y: f' k#if 0
2 r5 {4 @ v3 B7 k2 Q4 ^, V ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);( m+ I: Y/ W% L- N' B# z3 \, @
if (ret)
' c, w+ |# K) P- X9 W pr_warning("da850_evm_tl_leds_init : User LED mux failed :". [: u7 [' g4 E) @4 |
"%d\n", ret);
% Z$ D. u& r4 c7 ]6 ]. M: Q# H) @/ s#endif/ D9 V) S2 \6 ~3 `- \0 g
ret = platform_device_register(&da850_evm_tl_leds_device);/ I: [5 b6 e, u( X; {9 q9 e
if (ret)
5 r F+ v/ q: F" | pr_warning("Could not register som GPIO expander LEDS");) c! M5 E# D- a
else
3 h) d" D0 e3 h$ T/ [3 S, i printk(KERN_INFO "LED register sucessful!\n");. z, S: {5 d* k0 R) |% Y% ^
5 _! Y$ `1 ?. k) q2 ] return ret;" m' O8 ^% Z% J( Q/ W/ r
}# c h0 G* C+ ]4 E
3 [2 W! N7 _- S9 H+ L- F$ M
static void __exit led_platform_exit(void)
3 P& P+ ^6 V5 a# P. J/ M1 a, r{
* Y" `3 y, w/ Q: N. \ platform_device_unregister(&da850_evm_tl_leds_device);* J# \6 x: ^$ d) b2 i
: ~( b& }# i1 z3 @7 d! p
printk(KERN_INFO "LED unregister!\n");" K) Y" {7 k" T
}5 {) f! D$ c6 Q1 c C, b9 u
" p% _: t9 s/ Y! K3 d
module_init(led_platform_init);
0 S: u% q/ n8 `3 \* imodule_exit(led_platform_exit);9 F6 @" W( Z/ x! T8 n
) n4 ^, w# t- \3 ^
MODULE_DESCRIPTION("Led platform driver");
* {2 N# i. m$ b4 H' M) QMODULE_AUTHOR("Tronlong");, P2 w- F0 f: Y" c( g8 w, W
MODULE_LICENSE("GPL");
9 @- X. T8 W) s0 n S0 ?8 B* |
# a1 @$ q7 m9 e, G. |1 N. e |
|