|
|
求大神给下面的程序做注解,请稍详细些,谢谢。, e) a0 P) r; _* ?% C$ s
#include <linux/init.h># d, [: _- I9 U; Y* e9 C
#include <linux/module.h>
( k. S; V; W! k @& y1 U#include <linux/kernel.h>
6 L8 g* G; @: h/ I( u( Q. H6 q#include <linux/types.h>. Z1 F- n. a6 k: j- Y9 r' B
#include <linux/gpio.h>
: Y# m4 m( y- C4 x#include <linux/leds.h>
( E( q9 T7 d5 Q/ f/ w" X#include <linux/platform_device.h>+ r+ r2 o$ U% u9 ~
( A7 M1 r3 g# ^8 J& M6 w* Z#include <asm/mach-types.h>
5 s p! z9 H! o: l R* b#include <asm/mach/arch.h>
% _% g" J( o5 f6 ?/ K#include <mach/da8xx.h>
" e& Y: s y3 E#include <mach/mux.h>
9 z6 ^7 v$ R v% X# b* H- g! W% R0 W9 ?' T! H' e' H1 |
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0). h2 |9 \( u& i' O; A# }0 d
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
$ u5 y2 U, A3 Q' o9 W#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 d2 p6 q* B+ g! t i#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)# P- o3 Q# ^4 V8 u( y$ _9 o7 X( M! p" r
8 k/ r: E( b; ^! ~2 M' j- m' P/* assign the tl som board LED-GPIOs*/
- D5 I$ L3 Z3 U' @/ Gstatic const short da850_evm_tl_user_led_pins[] = {8 v& D" _- Q$ l6 w8 q$ q
/* These pins are definition at <mach/mux.h> file */ a. b' W L/ I, q2 N/ ~
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,, K' l* e9 y O, b
-1
3 f) p6 s X# s8 G& b; ^- o};
; C, I7 k5 X( e9 B, [2 |
' L4 D; ~- a8 L& ?3 K; O' ystatic struct gpio_led da850_evm_tl_leds[] = {1 ^, T5 U' E# R1 Z
{6 K* j4 E& {) e O1 B- F, P
.active_low = 0,
' i; f. W' U- M8 J+ e7 Q# z Q .gpio = DA850_USER_LED0,! w! x T' N0 ~1 k* q6 k
.name = "user_led0",! v& q& i9 p, P; P3 m; Y- f3 ~* ]
.default_trigger = "default-on",! j: O- {: T% g2 ?& e v3 h6 j
},7 i3 F/ X7 A% a( z; T5 X
{
, O9 M2 |' R6 ? C9 C .active_low = 0,- n5 X S. p( |, g/ V
.gpio = DA850_USER_LED1,
8 Q {; P! g4 p8 o7 U5 s! y .name = "user_led1",5 B. P. M5 i% U$ @
.default_trigger = "default-on",2 D' O/ S- r0 e9 n9 g! j
},; D$ q" m! q8 ^& W6 ]9 |* ~& u) {
{0 L1 W. ]+ |- I0 |0 s8 o6 h
.active_low = 0,
9 ^! L6 Q6 Z8 P+ g5 i .gpio = DA850_USER_LED2,
$ f E# v! B% N c: {" C" K .name = "user_led2",- B: `0 f8 N; ^! n3 x5 }1 T1 j
.default_trigger = "default-on",, b1 h' B3 c1 o# V' }& n9 u
},5 B. e. D) ]0 Y9 y' i: I1 u
{
' W8 ^2 s0 E o7 E1 n .active_low = 0," R5 U! V' X" i
.gpio = DA850_USER_LED3,
) ^+ O* R# v2 u5 P$ Q .name = "user_led3",7 ?; I- K; R) }
.default_trigger = "default-on",
; w& b6 z+ I, }2 a! c/ u },
% |2 G5 m I% Y( ~4 }- e};. r7 H" Z x0 t; T/ p7 V5 c# O1 p
8 N3 y* e6 Q; Q2 t0 _* w1 |. R
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' G$ Y- d$ {7 f9 T4 T
.leds = da850_evm_tl_leds,
. M @7 K& S }+ K .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
; ~: c! x7 x) H9 ~) t};
" F& J* [) n* z8 P! ~/ v, N, L% f6 F
static void led_dev_release(struct device *dev)
. q* w* n/ U3 ~+ F, V6 F0 |7 o{
- |' o5 ]+ Y) o$ @0 w% r$ g};- O! A& m8 Q& O) } X
5 X5 n5 p2 I+ R a; ?static struct platform_device da850_evm_tl_leds_device = {
) h+ L; M) a" r5 f7 d .name = "leds-gpio"," Z; L3 w* N* b$ m8 {+ J* d6 h+ I
.id = 1,( g5 Q5 I) ^! i' P% A
.dev = {
- Y9 b& Y" K- W& s6 x1 c .platform_data = &da850_evm_tl_leds_pdata,
" Q9 n" J5 j# U% J" j5 s7 Z- W .release = led_dev_release,4 w- {$ z, ]: l
}
3 o4 T7 s* k3 |# t+ x};
0 m! b$ e: j- q% h; }
# d6 W _: V# ~6 M, G) dstatic int __init led_platform_init(void)6 ^, @6 T; L! V1 K/ W
{; c) _0 W8 x$ m; @- P
int ret;
# L0 w- p; w; x' V/ H5 H#if 01 n H& F- s9 m- T
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);" n# R3 }; x6 w# v7 U" T0 I( ~+ X6 N# K
if (ret). j" ~$ _2 \8 E+ T; c8 S( Y
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
/ f2 b9 \5 v) F* H0 `* @2 h% C+ P "%d\n", ret);
* M7 c+ b4 B" O0 U( b9 G% ^; e7 ]#endif; }6 l! a; b0 y4 \: U5 r
ret = platform_device_register(&da850_evm_tl_leds_device);9 b/ O/ q& l! m( G1 [& ?
if (ret)
R$ c) d. U9 A/ M* H pr_warning("Could not register som GPIO expander LEDS");7 K" E+ Y4 l1 F. M' T r
else5 X' g; L9 }( Z' f, n. |
printk(KERN_INFO "LED register sucessful!\n");
- [ C- x6 N6 n( e C( |- s7 U8 u; j+ T/ Y. r" w# u0 D I
return ret;5 q0 z( |0 H" X! Q7 U
}
& u8 _6 F1 y$ e6 t- Y
3 Q* B c. b# v, n- [- {( jstatic void __exit led_platform_exit(void)- q, }, B% h! a% |2 d' ~* D
{
7 }% j1 K' V) Y) K2 q o platform_device_unregister(&da850_evm_tl_leds_device);
' w) W- u$ B6 h) a; {6 W
2 b, o- Z: w5 p% P t7 [8 K printk(KERN_INFO "LED unregister!\n");( t, E) ~, Q2 m" O- X, P
}( h! }/ I8 ~% K, g* r
& w8 l8 X- Z* Y6 b: smodule_init(led_platform_init);; b3 P- T5 R1 G& ^% U! c8 W3 U
module_exit(led_platform_exit);
; g! t2 ^- h$ l" K7 O( E# S8 e5 c0 L3 u5 G; g% p
MODULE_DESCRIPTION("Led platform driver");8 q/ w. _3 g3 W8 @
MODULE_AUTHOR("Tronlong");
) q2 R% @/ c+ z0 K+ yMODULE_LICENSE("GPL");
: |, J' ]8 M* \
1 Z; ^ [! s* Z; Y$ Y |
|