|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
% Z, B9 `# H2 L: S#include <linux/init.h>
+ _* ^* A) p* P4 i8 a#include <linux/module.h># v3 M: K% U5 X I2 h5 Z7 w
#include <linux/kernel.h>
: _& i+ m* J# W4 S: H#include <linux/types.h>& p& _: ?# v8 S3 H6 `4 A5 l
#include <linux/gpio.h>, t7 E- `* `5 s2 q: W* J5 ^0 N
#include <linux/leds.h>, v, L9 m- l4 w' h9 W' ~
#include <linux/platform_device.h>
& X9 d6 V8 S" s* N* z' s" w3 a. v6 y3 `% z
#include <asm/mach-types.h>
5 L& h5 [0 ?& g* E, b#include <asm/mach/arch.h>" P$ b8 Z9 y" s7 R6 o8 \8 g* H8 w: h
#include <mach/da8xx.h>
, ]3 j! ~0 ?- q) t, f9 a$ u! }#include <mach/mux.h>2 }/ Z9 i- u# d, t# k; u( g$ f- f
) r* j. K" H9 J; V; Y7 q
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)6 D0 Y4 F8 j3 f. Z0 Z) H
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" J3 ?% p5 o. M: X#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)/ n1 b9 m4 B& F6 c
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
% ]) A' S7 e2 V2 K3 X$ F
* p- T; i% M& c! p3 h- ?( S/* assign the tl som board LED-GPIOs*/0 B( W9 u% u0 I1 L5 a3 V. a+ Y$ c
static const short da850_evm_tl_user_led_pins[] = {
* e- u0 J; v) O M /* These pins are definition at <mach/mux.h> file */
9 f5 A% e, F& Y& O X$ y. N DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% g+ _. Z4 u7 F2 r& E- N1 f# B
-1
+ o+ B0 [$ e% l9 t9 }};
% T B( C; S% y: R7 S0 T0 H
4 u" t% V& }7 ?9 V3 I S, cstatic struct gpio_led da850_evm_tl_leds[] = {5 y) K( `8 k0 A5 ]) f% x
{( _ p; c& O `2 n
.active_low = 0,
! V" ~" I6 _4 n3 } @5 v .gpio = DA850_USER_LED0,
( f$ d0 A o* R. F$ }; X .name = "user_led0",
* B; ]2 ]$ Z2 K6 w3 G .default_trigger = "default-on",
3 g9 T& e* D0 q" X, k+ b% D/ A },
) k6 s7 Z9 N3 u( T* f {
( S2 r- I' Y2 n# w W( {* C- n .active_low = 0,( r. T- G; s1 T; g1 T, `
.gpio = DA850_USER_LED1,
9 b, g% A9 j0 f .name = "user_led1",: ~; w5 Y8 h3 w% q; Q# y
.default_trigger = "default-on",
& \9 P% H- S# ]6 R2 N },
* E8 i, ]" r3 H9 a" W2 u: s; @# t {# q% `" c B0 K0 |
.active_low = 0,
8 s* B' Z) l9 N$ \ .gpio = DA850_USER_LED2,! }4 u. l, F1 ^, M0 F
.name = "user_led2",
+ ^; t* z# v" Q .default_trigger = "default-on",
& T7 d9 ~. E" W% B: A5 A! K },' B+ o& S( N3 n
{
: Y- U: y- l; W2 D; W' y/ Z .active_low = 0,* g+ t- H3 o5 [& I2 E
.gpio = DA850_USER_LED3,
0 g8 P) u8 v" Y4 w! @2 B .name = "user_led3",* l* o/ x e) ?+ _4 e# D! j/ R
.default_trigger = "default-on",' `: h2 w5 k, F% M4 `
}," D4 a( e( m2 h g$ e! W4 A3 m
};/ e( {# d2 X! C7 b) K7 x, G# i
- N* M$ e6 }( s# n
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {. p& t3 Q- a7 M+ r9 s/ H
.leds = da850_evm_tl_leds,
" `: A5 p; ?+ [( ^, m/ @! x: }# M .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 Y4 U# _- n8 M4 |3 A};5 E* q4 Z, s4 K# s
# G0 Y1 ?+ z; n3 `
static void led_dev_release(struct device *dev)- K& Q& k0 M; Y- } n$ \9 \
{+ G2 I! \3 @) M0 r
};9 ?. N9 G5 k6 h/ g
/ A# W: b) K2 w" h- ^$ f4 Ustatic struct platform_device da850_evm_tl_leds_device = {
) }. h: P" h5 g, A+ d .name = "leds-gpio",5 J8 B0 r# \3 f# [9 h
.id = 1,
/ F( B" K; B$ K4 H. e5 Q) G) k .dev = {
! W1 H9 f5 S! k8 j# k; d1 K& {! P .platform_data = &da850_evm_tl_leds_pdata,- E' O8 p8 E6 U0 @2 p6 ]
.release = led_dev_release,
9 h% g4 w, u" h3 z }1 N+ s9 s( O6 L6 y& D
};
- }) A+ G$ v( a& C% Q2 [/ E+ K8 H8 w+ Z% R
2 P0 U" {/ \% Vstatic int __init led_platform_init(void)1 f: C( ]) R+ i9 L: H& K
{% M8 r: {: p5 O$ D
int ret;
0 ]7 i3 q. e! w% z#if 0
2 n0 ?) ]0 `" ^/ f( z& z$ Y ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);6 w% B2 N7 i' e' g5 j o) ~% t+ l
if (ret): d! A/ i# X! a( @
pr_warning("da850_evm_tl_leds_init : User LED mux failed :": U; r& ~, o; {& C+ V
"%d\n", ret);( n7 t- _8 Q+ E0 F
#endif
2 ~. a6 ^$ \# ?5 B @6 v" Q ret = platform_device_register(&da850_evm_tl_leds_device);4 p' R& G; T6 J* ^$ W h
if (ret)) S- B/ o1 d8 r1 |& l6 K
pr_warning("Could not register som GPIO expander LEDS");4 D9 @! X$ }, U0 y
else3 D( ]+ i- G1 {# {0 m
printk(KERN_INFO "LED register sucessful!\n");1 B% j4 s r* ]
+ R( `/ S2 B( H return ret;
W5 V5 |" ^ ~}
! C) o' q9 J$ U6 A3 a8 m s2 N5 V5 l6 O1 q3 h
static void __exit led_platform_exit(void)# B3 d8 Y( P, u9 F+ T6 z
{& O& k3 e/ L/ z
platform_device_unregister(&da850_evm_tl_leds_device);
2 F9 I9 l' S' O o0 b8 U1 j, ^2 ~( g/ m
printk(KERN_INFO "LED unregister!\n");% e. i/ N, t) _7 ~1 {
}
" Y( k* a1 H8 {% [2 t. M( O0 }- H4 ~% f' \6 B$ a
module_init(led_platform_init);
. o6 Z+ @5 F% W/ _8 [1 P. Vmodule_exit(led_platform_exit);: G6 _- B2 e9 \ Z1 {! E1 l
5 D; A! f& c4 R TMODULE_DESCRIPTION("Led platform driver"); k r! H* i, H, B e
MODULE_AUTHOR("Tronlong");
) J$ P. ?6 ?; M; h+ rMODULE_LICENSE("GPL");) R2 ~) Z( X' b3 M. z% y2 f2 \
7 s* n' u9 |% b. \ {6 i, R |
|