|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
! k+ W% E3 T- w! H7 o7 G9 ^#include <linux/init.h>
# Q) L2 D: ^* l8 e- C& u#include <linux/module.h>5 p1 |/ [5 `+ l3 M, Q, O* w! Q
#include <linux/kernel.h>
: D/ B# [. o- g#include <linux/types.h>
5 @7 J4 z: {0 ?# Q% v8 {, J' ?#include <linux/gpio.h>8 Q% Y* T' I8 V4 f9 d% Y( @
#include <linux/leds.h>- m6 T0 H$ }3 y9 D4 A* j
#include <linux/platform_device.h>
8 v4 Q/ p, n: ]) p1 T& o8 P( `
#include <asm/mach-types.h>/ H$ z7 ^6 E9 e4 Y
#include <asm/mach/arch.h>3 v1 m! W x- }' o4 g5 s
#include <mach/da8xx.h>: u0 y3 B, j: q9 a) M0 w
#include <mach/mux.h>3 d- f0 ~3 a( l4 o( d3 m+ e- V
' z! f8 q" \7 r2 w4 @#define DA850_USER_LED0 GPIO_TO_PIN(0, 0) Y0 q2 w6 L2 P7 s. N6 N
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5), N8 c0 N; m. D1 O
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
- r w1 r* o3 O#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
- z3 ^6 K; o5 Q
( A: Q. [" j; z* `! C8 z/* assign the tl som board LED-GPIOs*/" ~+ F1 z3 C5 t, ~8 v. o6 x. W1 [ ~" D
static const short da850_evm_tl_user_led_pins[] = {
5 v& [- p, N. B" u$ V5 b /* These pins are definition at <mach/mux.h> file */
7 s$ D8 ~5 H8 p+ s DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
. \( d* N" J. b. c0 F: n3 y) l( J -1
7 H5 ?; ?/ Q, q$ P};6 D' Q, _- }: X- M) f! {5 L- e3 D
, W1 x q6 r! d3 }0 wstatic struct gpio_led da850_evm_tl_leds[] = {
# h$ q N+ F3 N# u3 p7 e; q {
( ^- C8 d, a1 F U .active_low = 0,- k8 b( n/ J! l, k' N9 X5 W' P, O
.gpio = DA850_USER_LED0,
& x( @' g4 c" y4 T0 Z .name = "user_led0",% H/ y/ o0 O& _6 R5 q5 d+ h0 k& h
.default_trigger = "default-on",) G) y3 Z' p' y' Q( ]
},
* b' h t4 ?: K9 z {
, p ?9 c2 X* D5 T% {* v4 L .active_low = 0,
- {( d% b+ }' e# Y8 G .gpio = DA850_USER_LED1,
. r+ f+ J; |: i& T/ f5 t .name = "user_led1", @, ^: J p" V+ W1 ~% L3 h
.default_trigger = "default-on",& E/ d$ e5 Q; T( [. n8 r, g. s9 R
},* c3 {7 j- J0 U% x/ b, k& q. S
{- d# c/ O/ @2 O9 |7 ]4 |
.active_low = 0,
* C, n$ L9 R t: @2 W9 h2 H: H .gpio = DA850_USER_LED2," O9 Q P9 C7 X9 ?" c$ X4 Z
.name = "user_led2",; p! c P# A; X6 V v; N
.default_trigger = "default-on",
+ q! F% a" N6 G" k4 X4 K( K: s },7 ]& |: z R5 D$ z( t
{
" ~+ E# n' }. \# o, M0 f! J .active_low = 0,
7 Q; T" b: B1 m1 q8 p6 X .gpio = DA850_USER_LED3,( i) ?4 K( _6 b! `
.name = "user_led3",# q) u5 {: E9 I' T m
.default_trigger = "default-on",
. S. ?4 ?5 o9 O6 u0 a9 Q" y },
; ~- Z/ t7 k0 @};
* t" f) e" e5 O0 G- b
3 {0 P7 g! H* c3 R' ustatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
, P# @7 S H$ W* x .leds = da850_evm_tl_leds,
}4 i- O6 ?; \- O .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, ]+ u1 [2 }1 a0 O& C7 }};
$ w a* a9 |' \3 r% v5 e$ y0 |& C+ k2 v. S5 ]
static void led_dev_release(struct device *dev)- e" t/ y3 w7 g# U; R
{
! s% b1 e/ A" _' }) t};
* G( C' d7 r- u+ O1 d$ v
% q' K) H! d2 ^( F. Hstatic struct platform_device da850_evm_tl_leds_device = {
3 i) t- [6 s/ x" R/ h .name = "leds-gpio",8 R& ^6 ?1 v9 a( F R" W5 }2 h
.id = 1,
" w, R6 Z) Z, o) W% i! [ .dev = {
" f* g9 y. Y2 c. s! M .platform_data = &da850_evm_tl_leds_pdata,
4 G6 L# e# Q/ i. `% a .release = led_dev_release,8 [" [; p7 u" V. {
}
, Q/ ^# d+ T0 g9 U, ?, R2 ~1 n};
9 @& V4 i I# E% P! o1 q# t
' G `% T1 _% r4 L% v$ ystatic int __init led_platform_init(void)
) U- s2 k" _' R{* ]6 \6 z5 Z# w& q! i9 E, [
int ret;! {7 V2 q7 e% R3 x7 O# u0 L! g
#if 0
. f6 |- Y: U% o" { ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);5 ?5 { Q& K1 Z6 o: ~5 H& J! C
if (ret). i/ T+ v( [0 ~% H
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"- V/ y; r# E# w. b8 e% F
"%d\n", ret);
/ O8 N2 l9 T7 ]#endif5 E: L ?+ Y/ r* ^5 L9 V) h* W
ret = platform_device_register(&da850_evm_tl_leds_device);
: C" T+ D: T3 l3 M* K; s: J if (ret)
4 P1 S" b8 ~5 D9 x% a- T% p0 t# U pr_warning("Could not register som GPIO expander LEDS");
( G8 k0 n' y* B7 J else
4 Y- z0 C( R( ]; s# O* | printk(KERN_INFO "LED register sucessful!\n");
5 R5 z0 T) ?! A* ]3 B% U* l1 t7 F8 J0 ~1 `
return ret;
- Q, K1 A8 r- p2 X}; g" G+ R' ]! F. i
6 w \5 F3 Z' t$ ~static void __exit led_platform_exit(void)" O7 b! {$ F" p, v* t' l- Z
{
9 l) t5 J: k K! q) Q platform_device_unregister(&da850_evm_tl_leds_device);. C" S# Y1 E; q- D$ p
2 ~, Y; F+ r' v# X. e# b: W/ h
printk(KERN_INFO "LED unregister!\n");
9 ^ ~: P2 g, ?$ B" {}
' G: w, `' g l! I) F9 K9 H5 G& e5 M3 d
module_init(led_platform_init);' J+ s& A* H) h: l( m+ u
module_exit(led_platform_exit);
# j0 i; j" s* s/ n. U5 V$ t$ r4 P% u5 E" z. d# c
MODULE_DESCRIPTION("Led platform driver");
: Y2 c! L% Q# YMODULE_AUTHOR("Tronlong");( R, c- `1 `& B1 ^6 m8 z5 v
MODULE_LICENSE("GPL");
% Q" m2 }. Z3 i4 A" A- l8 F$ S6 g) T8 h3 n
|
|