|
|
求大神给下面的程序做注解,请稍详细些,谢谢。+ T! t+ G, r1 y$ ?
#include <linux/init.h>. A$ d& P i# l* l
#include <linux/module.h>7 P5 t' I* g# y/ t
#include <linux/kernel.h>; ~* X, S* K! |# M. j
#include <linux/types.h>+ X7 F4 C, E8 Z# x3 S
#include <linux/gpio.h>8 O9 ?4 _% a0 y; ^
#include <linux/leds.h>. W8 L( T/ J! _. ^. P K
#include <linux/platform_device.h>
) `: d+ Q- J9 I+ B" l/ M2 N; J, ]; E
#include <asm/mach-types.h>7 A- t) i. f y$ }5 ^% S6 {
#include <asm/mach/arch.h>5 b6 k# W2 c6 ^/ b& z# L( r
#include <mach/da8xx.h>
0 |$ }! r1 d9 U/ k. |2 e+ S O+ y#include <mach/mux.h>, q" L& @6 r7 C" N. a7 M# G- r
, q# f1 X; p j3 B- D% t
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0): u! q$ L% {3 I3 g& ]. i
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
* d! F/ {( \4 q8 y$ i% B#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
. x/ ?7 U7 ]3 @: I4 ?#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)% `# }' z7 x6 Q7 U# V5 T* F
# ?2 I4 S. Z- h9 y9 d7 E# J- C" a/* assign the tl som board LED-GPIOs*/
1 R/ ^$ g( S( k( x- K- K3 Y$ Vstatic const short da850_evm_tl_user_led_pins[] = {1 s$ w( K. C a: k6 h& C- {
/* These pins are definition at <mach/mux.h> file */0 v+ F g, C( x+ H7 h* a
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 J# y$ G+ c0 `6 B+ ^- `9 U
-1
9 ^2 a% c. q( x) ?}; u/ k( p: r9 i! V# Y E" i3 S* t
* I- n1 H/ w1 \static struct gpio_led da850_evm_tl_leds[] = {
8 L0 a0 _( U: F6 K/ k/ Y {
0 B8 }- }! W, F0 ]; E; Z! { .active_low = 0,
7 U5 k# u; F+ @; }9 J; G .gpio = DA850_USER_LED0,
2 ?$ X4 u0 h; T [8 [0 | .name = "user_led0",
; I* O/ x6 t" J, }" K/ v" C9 H7 _ .default_trigger = "default-on",
" `( K Q: _6 t/ S+ ] },1 M7 }# a5 l- {( R) E o" @: I
{
3 d9 U0 r+ Q4 N: i9 R0 z) J9 B .active_low = 0,
$ s# E& \8 \) I6 [ .gpio = DA850_USER_LED1,
! E1 A$ U# s4 @! n5 D; ^ .name = "user_led1",
v x7 [, G% M7 A .default_trigger = "default-on",' ~7 {5 N. `9 A V2 }
},) V0 H) i1 E& V4 z& m2 z. T. M6 @
{
& M: h- }2 l8 u g1 j .active_low = 0,
5 Q& p- L/ P- Q4 [7 p" I .gpio = DA850_USER_LED2,
- D8 o5 q3 `; `% D& D: T! U2 F! m .name = "user_led2",1 l9 X# O9 K$ t. a: I# @' V! U/ v- U
.default_trigger = "default-on",
9 {* Q S5 F' v/ @& z+ | },
1 T+ a' {* ?" m0 A- W7 [+ w {
6 f) Y. P3 f; I+ I/ Q0 y .active_low = 0,* Y) p f$ g( F5 s1 f
.gpio = DA850_USER_LED3,5 D. b+ V+ M8 C
.name = "user_led3",
+ Z9 D1 ], I. j .default_trigger = "default-on",
/ q9 G* C' w: v5 U7 W) g& P },8 f; s2 y0 r% H" ]2 ?
};0 L; L8 M' T2 M' a* J
- y- v7 G1 o: e/ Ostatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
3 [& ]3 R2 T' O1 c& B! D& A$ P8 B .leds = da850_evm_tl_leds," X2 }- _7 ?4 ?# a9 G
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),# f( y5 I( z7 W5 o
};
8 g$ h3 z( w- [2 Y, _' u6 j3 l! h, L* o& n3 u J/ K! u/ F
static void led_dev_release(struct device *dev)# |( q% ]5 c4 Y: W% F( {! X
{' r0 l2 c% ` Z( [* f% H
};
1 Z j5 k' Q/ a" w3 ? V! }7 m6 ~- v; s
static struct platform_device da850_evm_tl_leds_device = {
8 u" x+ P8 {% W. ]* I .name = "leds-gpio",& n- o# |- P1 u# E& j0 a! [6 y
.id = 1,
" C; u7 W9 J/ w$ R! x- u .dev = {
' t( P# |1 Z, q .platform_data = &da850_evm_tl_leds_pdata,
$ E$ B% X+ }5 D .release = led_dev_release,/ `3 F- y0 P3 n3 I4 r$ ~0 n
}
. C* Y9 k Y' @' g+ e6 z. [};8 _8 c! i+ O3 A
+ j ?5 e4 }; A+ {, U* istatic int __init led_platform_init(void)
* v! K. }; V8 ]3 _{; d* O Y, \# T. c) ?# a) @! A( m
int ret;) n" {2 J/ P" _( ~ N; P8 g
#if 0 K. |4 T7 L$ D. w9 A# _6 Z" p
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);* E% K. F7 X4 j" y) n: u* y! e
if (ret)0 d: T' L. z' k& K; f% {
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"9 a: Q+ n: {* Z5 C b
"%d\n", ret);
7 V/ a; U7 ]1 G5 [9 W#endif" n. _6 q& D, d! w, m! f$ O+ \, k, B% ~
ret = platform_device_register(&da850_evm_tl_leds_device);& m% n S/ R3 K( g4 R$ B7 a
if (ret)9 W1 ]& H5 B$ X$ U
pr_warning("Could not register som GPIO expander LEDS");% H' e! F; p2 c% ?/ v0 P
else9 c- Q3 z2 z- f/ K
printk(KERN_INFO "LED register sucessful!\n");
7 x% p) _. V+ \; `8 Z b2 V# K8 W/ r/ s
return ret;
# W% T, A1 N, w3 d3 |% i" m}
6 K+ a7 A& _1 c! B7 F' p
7 r4 }5 J% A/ T# |static void __exit led_platform_exit(void)
# X4 K/ |0 Q( D9 R{, @' g' O2 I2 X' j) p R' G% O
platform_device_unregister(&da850_evm_tl_leds_device); j7 B% r @' p
I1 y; _% o# F. \. w$ P
printk(KERN_INFO "LED unregister!\n");# V" J3 c7 L$ k' ]5 |
}
6 u5 ~' ~* f& [ C4 m, ^, P
# R* u! _! I! Ymodule_init(led_platform_init);* [/ d9 L1 v* U; t f+ ^. `
module_exit(led_platform_exit);
$ w& r, K$ K1 i. F1 T1 Z4 J; E- M4 m, g
MODULE_DESCRIPTION("Led platform driver");$ t6 T# A7 Y, f1 h6 y
MODULE_AUTHOR("Tronlong");2 F# p5 T$ v M5 w$ E
MODULE_LICENSE("GPL");5 @) h9 ]8 }& B m) n* R
+ @+ A/ D% X6 | ^ |
|