|
求大神给下面的程序做注解,请稍详细些,谢谢。5 P; @+ J1 W6 D! W- f
#include <linux/init.h>: y" S1 D! N s2 y& w# @
#include <linux/module.h>; l8 ^+ z9 t8 D4 m" S5 \: S
#include <linux/kernel.h>
* ^5 u' R- D4 [3 x#include <linux/types.h>
0 {# B! {; b: c8 a/ P#include <linux/gpio.h>! `4 h1 |3 ]" t# k$ z
#include <linux/leds.h>$ ^* k3 S( _, J
#include <linux/platform_device.h>9 r, v8 T# c4 k7 n% \% E f
( N. I! j4 \- b& b# x' Y#include <asm/mach-types.h>
2 l8 A3 d3 c1 n3 g#include <asm/mach/arch.h>
" [( P1 Y( g8 q#include <mach/da8xx.h>% |; M4 [; W3 j- r- g
#include <mach/mux.h>
[2 {- d! W5 m* d1 `. k
9 x2 t& f+ c0 D7 D1 X#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
# t. K3 }4 a5 x3 ?#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)- }( V+ l y% ~& w: `' r
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
: ?$ V1 B3 w+ C+ j#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)6 _8 A, d5 c# o0 G! q
% k8 e1 c/ _$ `, V8 f# _/* assign the tl som board LED-GPIOs*/
' o8 h( H# e& e6 O' X7 |static const short da850_evm_tl_user_led_pins[] = {
! w1 y+ x6 Z- k. j5 m$ } /* These pins are definition at <mach/mux.h> file */* \. U' N. @* W" v8 N f& D
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,0 }& O" i* b1 j2 \8 |& }' V: X
-1& n0 U3 P9 Z. V* z- o
};
* q4 O# y: O, v9 g; J
- n' X; i/ f9 {static struct gpio_led da850_evm_tl_leds[] = {& @6 l$ \; `$ G$ z. X2 x% R1 h, `, Y
{4 S/ K. y2 Z+ j, G9 I9 o" q& ^
.active_low = 0,
; e7 m$ l, ^+ r .gpio = DA850_USER_LED0,9 V) L4 ]2 A+ p. t2 m( s. p
.name = "user_led0",, O* E; ^3 m# z; }9 m9 K' ]/ o
.default_trigger = "default-on"," {$ V) p7 h9 Z9 a/ V8 p' J2 S- j
},
1 i j5 z1 I; q {
- @0 L* _- u i1 w# m .active_low = 0,
- o6 O. \/ }% [# H! T .gpio = DA850_USER_LED1,
1 l$ Z! t* {3 d4 l .name = "user_led1",
' c& r5 ]: H, f* @* s) E .default_trigger = "default-on",
% d+ f$ \/ Z1 z+ t. U4 d% M },
: Q0 N, u: K, n( n {
) ~5 [' [2 g5 w0 `" u R. T+ l) Y, O0 ~ .active_low = 0,
) [9 U/ O$ R4 h0 j# F' z .gpio = DA850_USER_LED2,
) r4 o6 Y, H2 O$ h .name = "user_led2",
8 A! c p- E ^. f2 ~$ t, V1 q( [ .default_trigger = "default-on",' |5 d. t1 f/ d1 X; s$ i1 Q+ T
},( s' ~6 l" | {0 x4 s
{4 t; G2 s) J" W# t
.active_low = 0,2 z% Z3 x) j5 ?3 M
.gpio = DA850_USER_LED3,% z9 K% ]! Y3 m/ J& E# @
.name = "user_led3",
/ l' K5 M# X; \- k0 u* e4 { .default_trigger = "default-on",2 C' _9 o" v+ S& ^; C5 h7 s
},
1 _2 Q9 I* y- [' A};( W4 L' }; w0 {2 v3 s9 L
4 e8 x e2 x2 A! h. Y, M; X6 D* P) T3 u
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 k/ c7 e, I! S$ h
.leds = da850_evm_tl_leds,9 _& `5 }2 ~. L: H4 C
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
l$ S# W- p1 l- H7 m# l};
( d5 Y2 ~4 @9 ?8 g+ Z7 `2 j; g. d# O9 L7 |) T
static void led_dev_release(struct device *dev)* d N1 Y" ^) W0 h
{! L/ t# A1 O8 p b' M
};
% S) f* w/ K! [2 t6 g [4 Z7 D# U2 O; k, e# W" I" c) J5 V6 e: E
static struct platform_device da850_evm_tl_leds_device = {
: B* r# C& r) V9 q: E .name = "leds-gpio",$ O, m) b' g% {. Q# u7 t7 @
.id = 1,9 P' h Y1 O9 A5 @- y# V
.dev = {
8 N ~% r! a1 } .platform_data = &da850_evm_tl_leds_pdata,$ ~( i7 S, h# K+ j2 W
.release = led_dev_release,
* F8 v S% M* s9 P }( Y+ ]5 B6 X% k, z# g+ g+ T
};
# w3 h8 f. _) ?2 j) p* Y# U8 c2 i5 u0 \
static int __init led_platform_init(void)
$ C' Q: }1 Z! g+ l4 W4 f$ F{
/ Q0 g+ s% |/ w4 T int ret;
@1 R1 h% ~, ~4 [1 ~7 K# Y#if 0
3 o: m7 b: O7 B. H! t0 o ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);! ^6 @" {7 n2 E" L* a# f4 `0 }2 P
if (ret)
6 N+ w0 k& I' D H6 M; i& o3 B- \ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
/ i0 A. {5 d8 e' W' d "%d\n", ret);( v5 o3 v @ U$ e1 ^. p$ E7 r( M
#endif7 v- x, ]$ i1 v N( t
ret = platform_device_register(&da850_evm_tl_leds_device);4 U& }, ]5 B9 j0 D
if (ret): W4 ]/ q+ z8 ]; J8 ?2 x
pr_warning("Could not register som GPIO expander LEDS");
/ Q' H* B: x5 `0 R# ^& f/ z else- e, b( b3 A, A
printk(KERN_INFO "LED register sucessful!\n");
9 u6 A3 c; J) x& x/ d: ~# z/ F8 Z5 U' W, X3 i
return ret;* F- ?' j! f1 L/ C
}8 \$ W# J/ h8 ~+ C
9 R" G. _ h! g# j! Bstatic void __exit led_platform_exit(void)
5 l* s% z+ t9 Q* f# I{
9 }* h7 z- @, M platform_device_unregister(&da850_evm_tl_leds_device);7 i! a' r& [ L( k- H
8 m9 w" A9 i6 A& w+ D) _ printk(KERN_INFO "LED unregister!\n");
) U0 u) D$ G6 U0 J1 `% z9 x' g% [}
! h$ y" \ d) c% n4 f' X* i
- h4 J5 W: R) _3 }! Amodule_init(led_platform_init);$ A; B1 ?2 T( \5 m0 C
module_exit(led_platform_exit);* [% X1 G5 ~8 j! Z/ c
( T& x- |5 G) _* w3 [MODULE_DESCRIPTION("Led platform driver");9 c& c# m+ _ v; c, c5 ]
MODULE_AUTHOR("Tronlong");
" u) g3 u4 J. M& y( [MODULE_LICENSE("GPL");4 D" ?, _! n& w6 A
- P) t$ y" l w" Y |
|