|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
. q3 F/ ~- W3 k' t#include <linux/init.h>
2 T$ c1 y7 ?3 G+ M2 Q#include <linux/module.h>9 ]( w% ~! [( \( F! T3 l( V7 s
#include <linux/kernel.h>! d3 v! M3 Q G. f
#include <linux/types.h>! s4 Y" H O' S7 D" m/ d3 ?
#include <linux/gpio.h>
! C0 L4 j/ o. [5 ^3 m% r#include <linux/leds.h>" ~ o7 {* g$ q' c8 `4 ^; J. A
#include <linux/platform_device.h>$ U+ Y* h; _( g2 t, z/ v U3 F
7 i3 I2 ~& {% c. N( w
#include <asm/mach-types.h>
! r4 O8 C: @: I9 k8 V8 Z#include <asm/mach/arch.h>
2 {. H/ b3 K$ H: G) x9 ]$ ?#include <mach/da8xx.h>
4 E' a4 T8 }# q9 {#include <mach/mux.h>
# `' G: E+ P- z- o1 i
# M) p) c7 C! n! l7 T#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)6 s# @2 {9 p, U9 k9 c, H$ e
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
5 l% O. @% M: C5 D# u#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)5 x; p( H( X/ N# A' r$ f5 Z
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
; X) t" B+ V( A' B; G; P
; Y: N9 i. T" X+ N: o" m/* assign the tl som board LED-GPIOs*/! Y4 g$ J5 c5 O1 k8 i% O
static const short da850_evm_tl_user_led_pins[] = {
" S9 g# E; \6 S6 A /* These pins are definition at <mach/mux.h> file */. d, X7 q6 p! z6 |% F* K1 _) ^
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5, @) Y. f9 x5 m& [5 v, c2 g
-1
" X: K; C* j( |9 } ?};9 ]% c$ p( q a' J1 r
: x3 a g ^3 a
static struct gpio_led da850_evm_tl_leds[] = {
8 t5 o$ f& L+ S( Y+ U7 _ {0 K& \* C4 K1 }* D k6 N
.active_low = 0,
1 N0 g6 z q0 D% ^4 _ .gpio = DA850_USER_LED0,9 k! ]: U9 @9 M
.name = "user_led0",
) T+ |. s6 X/ }! b: r .default_trigger = "default-on",2 U2 w3 u: w: q p: T r
},- X9 C" \1 g2 q r3 v5 o
{
5 K6 T- _8 a7 {# m .active_low = 0,; E# y- |4 k& R, b1 d; X
.gpio = DA850_USER_LED1,+ x# V+ _9 |2 D) C$ }
.name = "user_led1",
" ]% E2 G4 |" P) g# E6 @5 q: l5 C .default_trigger = "default-on",
& j+ g! X4 V0 F% C* s5 F: K' B },
. @) e" m& T7 d1 f* h8 l6 t" u( g1 a" l- [ {$ Y+ ^. z! U# ^( M
.active_low = 0,
1 ^ q6 f+ t2 V- ~' y .gpio = DA850_USER_LED2,9 K* }% T% I9 e! Q
.name = "user_led2",: u; q3 m: b5 M, K, z
.default_trigger = "default-on",2 S: ~+ @6 V2 v+ S7 ^5 L( |
},, b8 T; N! `9 l
{& k* G9 {2 i3 x
.active_low = 0,- q! f5 {& l9 k9 l' a7 b D
.gpio = DA850_USER_LED3,) ^1 b v5 c4 j, l. Q
.name = "user_led3",
* y5 X" E, J1 P8 \% j( H .default_trigger = "default-on",
5 p3 N8 ]( |# O: A1 M+ F' u },
4 ]" O f$ L: d S) j( y$ Y0 T};
& F% G# k) ]8 m2 g- S
2 m0 c. W2 @. P T2 kstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
- F$ H. K' \/ n" \( C' o .leds = da850_evm_tl_leds,
' ?: W) e6 Y& t1 r4 @- b .num_leds = ARRAY_SIZE(da850_evm_tl_leds),: l% S1 i0 B C7 c
};
# v+ _: L/ O+ D$ ^
' ]. ~7 H0 A9 R9 ^* j" o* Y$ ?static void led_dev_release(struct device *dev)7 \5 r, o; `6 {" L
{) R L* K6 g' F2 G
};
5 l- X w9 L0 K+ S8 Z9 w% k( p, V" P9 {
static struct platform_device da850_evm_tl_leds_device = {4 T8 v t0 a4 q6 j1 Y+ M a8 C
.name = "leds-gpio",# \: X8 `# z( [3 T
.id = 1,9 ^% O) n+ c& G3 z/ U
.dev = {
6 E- k T/ W* a$ h) m: H .platform_data = &da850_evm_tl_leds_pdata,# \ F3 f b. e2 W: t
.release = led_dev_release,3 `, ^ b; |7 U* [& o2 p- k0 \
}0 _" T% w; a0 Z
};
* W4 F1 K2 b3 J! i# w- @' \' S) O; P1 v% b
static int __init led_platform_init(void)
) u! K. m0 W m; S{
9 r% s) j3 C7 i% `. n* |, { z int ret;
6 G% @. ~# X' M i#if 0
s( [ U; E( B. P0 f ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);7 r/ ]# M4 p1 X& j! u" f
if (ret)" s$ \( ~6 o& |" ]+ I
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"7 J0 I# P8 M& }6 ^( u
"%d\n", ret);
- X( t- A; K, g0 I" O& c#endif
1 c8 k, }. \3 p( S ^" { ret = platform_device_register(&da850_evm_tl_leds_device);3 B6 G, V1 i6 a
if (ret)
1 ~+ ~) F# j/ w pr_warning("Could not register som GPIO expander LEDS");
: r7 n4 w& v9 F3 ?7 r else
1 h3 m( ]8 n( A5 M printk(KERN_INFO "LED register sucessful!\n");
6 Z) N2 ?4 {1 |2 m( z% C/ e4 q7 g$ T) V9 x
return ret;
0 L% |- C+ s* B2 Q, z/ M}+ s8 V1 _2 u9 f R! \
7 J$ b6 J) p ^8 }) A) E. J5 W
static void __exit led_platform_exit(void)6 ]6 ?' E$ N( _. m. g& `: r
{
5 `3 ?# B4 u! v* W9 W5 m platform_device_unregister(&da850_evm_tl_leds_device);
0 R" M, d0 Q6 ~& ?1 a
- B5 _6 I. i) d+ v8 p printk(KERN_INFO "LED unregister!\n");
, n6 Y% F1 b& D' }0 h! W8 [) ?; o: O. C}
/ o6 g2 s, d/ T5 S! i+ u8 `, m% E# @, P
module_init(led_platform_init);% h7 V2 z+ j" r5 g& N5 j" V
module_exit(led_platform_exit);! D) _. v$ D x' l
/ j, O6 n1 q8 f1 IMODULE_DESCRIPTION("Led platform driver");
$ g* q" ~% H; {/ Q% c+ g5 QMODULE_AUTHOR("Tronlong");5 Y( G7 |. s6 v' i: P
MODULE_LICENSE("GPL");; u9 V& T# h( l$ H( X
2 ^ u$ f, y R0 C4 j! u- Q" r |
|