|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
* Q# d% ?5 p/ B2 F4 `( G#include <linux/init.h>
" p* w5 f r6 {! e+ ?#include <linux/module.h>/ c) i' N& d0 m& S
#include <linux/kernel.h>: T9 ~' n% K: y& G: W9 ], z1 s1 H
#include <linux/types.h>
2 E( K! T8 b: v8 G#include <linux/gpio.h>; S9 q5 u1 u# w: ]7 w
#include <linux/leds.h>
, L3 l R/ r3 d% l#include <linux/platform_device.h>
) ?! X1 [' l4 ?7 }; S6 V* E9 G2 X) f9 R
#include <asm/mach-types.h>6 H, ?/ {$ ?7 K6 z9 ?4 j
#include <asm/mach/arch.h>
& H! N# b; L5 d" `#include <mach/da8xx.h>
, T! D- P; W# L" W/ \8 {" H#include <mach/mux.h>
4 @1 f1 O$ ?; q: d! y
' b+ x* i. {5 ]8 E& }7 [3 c2 `#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)$ H1 i; {" x2 |% ?+ o
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
: F8 Z! S: D( o0 K; T#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
7 r4 m2 b" R! w9 m6 [6 h#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
- f0 D0 h! v$ ?4 p$ ?( Z
4 u( W" z7 C9 ]6 k6 v6 q2 m% w/* assign the tl som board LED-GPIOs*/7 ^5 z- f# X* \, m! M
static const short da850_evm_tl_user_led_pins[] = {
* F5 E* _3 N9 l& a- Y /* These pins are definition at <mach/mux.h> file */
) t0 c' \( V; {4 r DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,8 W8 B2 t9 I9 i( n# l
-1
/ ]0 Q0 U) A& m};8 `' P9 F- [! B/ ` B
% T4 e0 ?& ^5 Z3 `$ n# S% W
static struct gpio_led da850_evm_tl_leds[] = {
* r+ m* R! |) L, y- G {
( Q1 ~/ Q. ]% k8 D: P .active_low = 0,
/ u `$ K, l: { r .gpio = DA850_USER_LED0,
+ [6 h4 p2 S5 @: i. s0 z P .name = "user_led0",
6 s) y% K! m* I) j. [+ K3 e .default_trigger = "default-on",3 \0 v2 o+ k4 j# f! Z/ u( a
},1 m& X+ Y9 F& X7 p) o
{, c0 p- \% o4 o! I; I
.active_low = 0,5 P8 c/ u6 E, m# u4 v
.gpio = DA850_USER_LED1,$ L( d6 r% l2 K
.name = "user_led1",+ T' Q! z* d% |7 K6 }4 H2 {" v
.default_trigger = "default-on",
0 L0 |! q/ P; ^, t* N, D/ b },
7 Q( u, B% H6 P7 q* B/ [ B {+ o# ^' U! c& d7 Y* K
.active_low = 0,
8 W, Z6 V: Z# l) C. P .gpio = DA850_USER_LED2,% V5 h4 l& N( c! p% D' V
.name = "user_led2",
) ~6 ^9 {9 Q( Q7 C. K$ I! A; } .default_trigger = "default-on",
# Q7 p) r6 c0 U( x6 O' j },; h( [2 |/ p) f8 e9 b, J
{
! T1 y* r' {* P! j" `# ~, u .active_low = 0,
8 _- w3 G- M8 @# o* ^. M5 D .gpio = DA850_USER_LED3,
: v7 R t! E8 P: I( {2 a .name = "user_led3",
/ `& y3 J! J/ [' P) m1 Z. |1 F .default_trigger = "default-on",$ _" `! e, Y3 U+ O( i# i
},
. R" W4 _# y9 q};# i+ e6 C& j9 i5 }+ I
* [# r+ U9 {% |; u) q5 ~static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {6 k a; s: V6 L- |0 H' t+ P7 G8 \( q8 I
.leds = da850_evm_tl_leds,
9 R7 y( @7 s: O5 Q9 T F8 t .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
' j) E* X% {2 s3 c( q6 b; x1 A};
( i) n1 R L) u) G2 B& {: l) @2 A1 v$ B: C2 p: T" p3 a% g5 X& v w
static void led_dev_release(struct device *dev) d6 k* N. w% F0 Z+ R$ a. ]7 H( Q
{1 {6 |( {# s0 l4 g/ `! T: x! b; j
};
. ]5 H) b$ K7 [! J. |3 C: p5 @. j4 l7 b* C3 `8 W- `! L& t
static struct platform_device da850_evm_tl_leds_device = {
0 _9 k) V- q0 z* ?" Q .name = "leds-gpio",
Z* K$ S% ~/ n7 v, K* Z .id = 1,; R- p) Y/ J$ ]
.dev = {
$ I7 ?5 |) b# D( N# U m9 {4 K .platform_data = &da850_evm_tl_leds_pdata,
$ U2 W* H/ q% V0 }: I .release = led_dev_release,
3 Y2 t; ?0 a6 H4 K, J- ]1 l2 U1 b }
! B. G% |+ [$ w0 _9 f( x6 ?};) k" Q; b6 `( l2 W# e8 _& a3 f
% O1 v+ }6 |, `5 }% Wstatic int __init led_platform_init(void)
. w" F. q3 K" l9 ?{ ^) y' z; L4 I* H
int ret;
* ?# J" y; O9 ^; `& e+ V) k* M" @#if 08 L; ]0 s, ~' T2 x! C
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);( H, u, N( P4 b/ M5 Q
if (ret)
& j0 z: X9 o9 z pr_warning("da850_evm_tl_leds_init : User LED mux failed :"& u2 b& N4 K# `- Y; B9 l6 n' z
"%d\n", ret);
4 J- a+ [7 \0 h6 l4 {8 m& J#endif
2 @* d" x3 D* s; U& u3 T ret = platform_device_register(&da850_evm_tl_leds_device);
% T4 O4 X( |# c: R8 R5 y1 | if (ret)
/ P/ Y+ x" `4 C" _( \ pr_warning("Could not register som GPIO expander LEDS");) F! f3 G1 i; S! ]2 z" ~1 x7 e
else
! u3 U; a7 I T- ^ printk(KERN_INFO "LED register sucessful!\n");
" j+ X2 w) I {' B. y
/ C# |: B! W8 V8 U, J: n2 c return ret;0 K2 {& k* A* D: q
}
( {/ [) @$ f2 h( m) J. O3 q* x4 W* c& E- S5 m
static void __exit led_platform_exit(void)
+ C) ^' T7 V+ R, L, `4 y- c* g# k{! t! o2 G+ d7 I' U; u
platform_device_unregister(&da850_evm_tl_leds_device);
' b8 H2 F! Y2 J6 u& z: a& {
* I$ v+ {0 k l printk(KERN_INFO "LED unregister!\n");
; G) H1 y1 U& U }. b}
- ?0 L6 z: j4 \5 D$ W/ u( t' C# w- s# _/ g: E: R9 E
module_init(led_platform_init);
( ^# ?( ?9 g# dmodule_exit(led_platform_exit);
9 l& m2 {+ ?3 T9 u1 m2 ?
# j8 l1 m# M/ X% n$ M- vMODULE_DESCRIPTION("Led platform driver");
% n- J, s. N8 ^) G2 F4 c1 |3 R A+ ? wMODULE_AUTHOR("Tronlong");
2 g/ N2 {* F! g" [( I% Z0 l5 [MODULE_LICENSE("GPL");) x N1 M/ D9 U8 J
. D( X: q4 d" O
|
|