|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
- L# F+ t% j( U+ ~: u3 V+ c#include <linux/init.h>: B. v% y# d- k" L( X
#include <linux/module.h>$ w4 y% m# a5 _ w( u
#include <linux/kernel.h>
$ ]2 c) n. O8 S#include <linux/types.h>) G% ]1 W0 a' g- n
#include <linux/gpio.h>
6 X, @- V# M1 }6 b! }#include <linux/leds.h>) [4 t+ X' A# q
#include <linux/platform_device.h>
! ?5 `# D9 P& }; W2 U4 q) b! ^6 w( ?& R; D: v4 J+ g0 d. L. e
#include <asm/mach-types.h>
1 H) R: v1 D) d+ {0 j#include <asm/mach/arch.h>- j" U( s0 q6 G7 \
#include <mach/da8xx.h>8 A r: z% E M1 C1 P+ q
#include <mach/mux.h>; ~% E3 y* ~! {
' r, a V. P& d5 K2 Z3 L9 } A( v#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)+ I, c: m: Y# {! p" _" e- Q7 H
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)1 _8 _" \; M; e) H0 O" x& E; R4 z% W/ R
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
; } A9 s: Q s. t4 Q5 t9 q' s#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)* j" H7 i, |, t3 D: G/ `" T
" c3 z1 K3 f. b( B* e- Z% ~/* assign the tl som board LED-GPIOs*/9 A+ B0 j8 Z5 b" b
static const short da850_evm_tl_user_led_pins[] = {9 ?/ q4 n- @* g% d
/* These pins are definition at <mach/mux.h> file */. ?2 I4 C/ D% P
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,; c+ C/ k) a+ P% M) W q1 _
-1. b8 l2 ]6 Q& e- ?: Y
};: m" P: b. g& O/ v3 p2 v1 V
, Y' O! m' |5 Z3 ?7 Kstatic struct gpio_led da850_evm_tl_leds[] = {
! j2 L$ g: i# C) H; k {- a7 G% N% ~! U' q
.active_low = 0,
@9 O* |" P! \9 q; t .gpio = DA850_USER_LED0,, ?0 J$ F5 {2 Q& Q. u4 {7 ]
.name = "user_led0",1 e! z4 k; h, F5 O, {. U
.default_trigger = "default-on",: ^ A0 w# x7 u% d( N1 a
},
# p! W, b) R2 q2 `9 Y {" @: Z. D$ u7 L: i, T1 G
.active_low = 0,
9 u3 x6 G5 B' z .gpio = DA850_USER_LED1,
3 U) j& z% B+ K .name = "user_led1",* k6 N/ y; F+ f- X
.default_trigger = "default-on",% A6 Y {* c* I" [
},
2 F9 K# Q7 T& R, \: C" s {" q, a. M5 i$ i! {. v
.active_low = 0,
! _& c W J [) \3 k .gpio = DA850_USER_LED2,
+ X: T# L; X6 h( \1 n .name = "user_led2",
) u: U8 J% ~: d. [4 d9 u .default_trigger = "default-on",8 {6 h: ^, U I. L
},
3 E6 c6 \! F g$ H4 p! a9 _ {
0 l; R. X6 E# z. w7 J2 i' ? .active_low = 0,
9 Y9 D3 x7 ]. K, I0 P( x .gpio = DA850_USER_LED3,
2 @# g' ^- j6 u0 \ .name = "user_led3",; d1 P6 u# X! x# q) t' _1 J, W+ A
.default_trigger = "default-on",& k7 N! `$ O2 r+ R2 P$ e) D/ y& c7 i
},
+ c* e W1 u# G7 M};
% f& p9 g; Z& s9 I
8 j2 a* W$ L/ ostatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {8 P/ e6 z; g- F( q$ Y( P
.leds = da850_evm_tl_leds,
; T: }% k. {/ G. b" ?5 b .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
# }; S, F" Y, C0 y/ g. E};; |8 Q% ?" s1 N
" X" M3 e) Y, i& v3 L3 ~
static void led_dev_release(struct device *dev)! Z2 \$ W4 ~3 ~2 L+ k' ~6 g
{
- m6 p+ ~4 y. g: H1 I};( G5 j, z" ?% ~* _8 }
$ a) w/ H" q5 d
static struct platform_device da850_evm_tl_leds_device = {
1 d' m+ k" \9 A" C .name = "leds-gpio",( C5 S1 p( C2 y% k
.id = 1,3 j% K9 Q1 a# T5 v, @; @
.dev = {
1 ^. c8 F) P+ t( d8 f. b .platform_data = &da850_evm_tl_leds_pdata,, L# X9 r" B) q7 X( K
.release = led_dev_release,
- ~2 j' V2 W. ^- |& F& E3 i. G }
9 `; K# c7 ]9 i% U};
9 p( V1 J) E; Y9 ?5 k( |( c" N$ g5 X6 r% x
static int __init led_platform_init(void)
. O: R( j+ w6 K& P- W{" ^ w% H9 |/ [' q7 W% B# m
int ret;- L w2 R- M2 I# y. M- u
#if 0
+ i3 Y+ \: L4 b; m! r ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
' a: d; I/ z/ V+ W. ~ if (ret)
; `; H: h, N. E pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
' @4 U! o. Y+ H7 I- j% J4 l& _ "%d\n", ret);
& ^+ P, y% p& S. e/ Z#endif+ }8 I. p' i) {
ret = platform_device_register(&da850_evm_tl_leds_device);5 O0 h! `4 y- Q' i, f& m! w
if (ret) b1 d" P( E! z0 T; Y* O
pr_warning("Could not register som GPIO expander LEDS");
- E4 L. t$ V, y" p else# \1 @ d+ y) I+ \# ?# s4 m
printk(KERN_INFO "LED register sucessful!\n");
$ K k3 K, t7 _+ S- H3 h \ @) \4 p+ G X
return ret;1 b' ]& {' s' {0 C
}
+ d& @0 H; n& w* Z* v4 p" {! d. \/ j4 R$ d
static void __exit led_platform_exit(void)
5 e- y; S0 _, s- o3 y( Z4 t( g{
1 F/ B5 P3 Y- n- Q# J, e9 W platform_device_unregister(&da850_evm_tl_leds_device);; C; O- \: p# H i) h2 t
/ Z/ J* P$ H6 R/ r" p! z
printk(KERN_INFO "LED unregister!\n");3 Q4 s* H. J4 B2 S" c
}1 O1 s$ Q( `% b# s4 r, _
4 p5 }: _0 B+ g/ v0 ~% wmodule_init(led_platform_init);
3 N$ ]9 U. d9 m& P- A4 ~! q0 I4 amodule_exit(led_platform_exit);" |9 {9 j* _8 c1 k- G
1 ?$ ^. @0 N. e' ?
MODULE_DESCRIPTION("Led platform driver");7 z+ ]% F6 x) d
MODULE_AUTHOR("Tronlong");; G& `9 d5 H3 k3 f8 ^1 e5 V$ A
MODULE_LICENSE("GPL");$ [8 u2 G1 ^' }# b% M; R' p, f( p- r
* \) C0 V9 T& ^$ [+ r |
|