|
|
求大神给下面的程序做注解,请稍详细些,谢谢。- G# t4 S9 _( ]
#include <linux/init.h>$ o! v# V: n% c- R
#include <linux/module.h>
4 L( X2 F: Z; C& _. d#include <linux/kernel.h>
! p# ~+ \: I; l. M#include <linux/types.h>
. |: e: ]/ m- {2 N#include <linux/gpio.h>0 K! V2 E0 }& o/ r1 j
#include <linux/leds.h>
6 I/ f# ^& a! R$ [#include <linux/platform_device.h>
( c, R+ ^4 J% T7 O4 n( ~& J! _
* Q: [0 Q3 C4 \#include <asm/mach-types.h>
5 c; T6 ]% M L4 M* q#include <asm/mach/arch.h>: `# m Z' a v9 _: ^
#include <mach/da8xx.h>
& ?, l A. T$ A$ r& k6 q" B#include <mach/mux.h>& p/ ^4 ]: O1 Z6 ?6 ~9 K6 f
8 a0 ]) Y+ K3 f* n. `4 Q4 o+ N" V#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)/ u5 f1 i. b2 Q5 z- r
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)3 k% d! @7 Y& z9 a
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)9 ~$ F0 K/ ` Y. n; O% K/ z0 k
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)& q+ k5 i% K3 G4 J5 p7 _$ \
) }: e6 J+ n( V: W* E/ M: }7 A9 } a/* assign the tl som board LED-GPIOs*/
+ C' r7 O; F: nstatic const short da850_evm_tl_user_led_pins[] = {+ X- y* K$ ?" A7 ?7 w3 ~& ~7 \0 g
/* These pins are definition at <mach/mux.h> file */" f' N3 c! l7 B$ `2 z2 _, V
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
1 @' `/ Z* i/ Z3 d: }) C -1- R) K, n9 n6 `% {( c" g
};- ~" m: i5 F3 \; ?1 p( \
5 b- U! n' B: ]3 T- S' r2 Zstatic struct gpio_led da850_evm_tl_leds[] = {) \4 y+ q7 }' m5 S' ?7 r1 K- @$ b
{4 ? \$ L7 h$ i
.active_low = 0,) y; z! ~9 g6 Y0 g' `$ [/ T
.gpio = DA850_USER_LED0,0 {2 ^4 o* U! `! e m
.name = "user_led0",
5 ]0 S) R% A+ A; p0 { .default_trigger = "default-on",- W9 R4 F: y/ J+ q9 e* b: {
},) r5 X' K, d9 k$ R+ B* N' B
{
/ d2 h: P7 a+ x6 `% n% e9 ] G D2 a .active_low = 0,% `6 g" q) t, S( G6 L* V8 E
.gpio = DA850_USER_LED1, ]; i1 ~. X. h% R. ?1 \
.name = "user_led1",
/ X. a$ b: |2 s! T4 B$ e% v } .default_trigger = "default-on",1 G' s4 f5 e# \6 C
},$ S/ }* s% P6 r
{3 f/ p- o; u# D' J+ G8 G; W" {
.active_low = 0,4 V; w1 b; S# H9 J/ b# W* S
.gpio = DA850_USER_LED2,
2 X% v' I5 o( E .name = "user_led2",
. d* i" G: N' E4 w .default_trigger = "default-on",
6 y$ ?1 q f, r4 Q" A },* q/ J3 f# T) b! k% U0 b
{ ^, j8 o. |$ L x2 u6 t
.active_low = 0,( t3 t% ^! [1 `9 K0 s
.gpio = DA850_USER_LED3,
' T) q5 _; ]" \ ]- j0 q .name = "user_led3",
% J* e# ?1 q) N. ~# }$ k .default_trigger = "default-on",, h; O) R+ C1 I! j5 B @( `5 E. o
},
- L+ \6 O) k* w/ `- j};
. n3 |- w1 f7 W% @; W: S1 }% u8 b! m
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
7 t8 J* T/ T2 ]9 ]8 p .leds = da850_evm_tl_leds,
' r+ A' S! ?- l+ y2 [. _+ B .num_leds = ARRAY_SIZE(da850_evm_tl_leds),' @- a$ k8 D8 A) k2 p% d: N2 ~( x
};
; x& J8 o. W: }: `) o: G
0 Z0 N: H% X1 d' [+ [ h; H6 tstatic void led_dev_release(struct device *dev)& {- L) p! C- _$ g, T
{
8 {# n0 `. q- {( Q};
4 O, h9 V8 @7 A& W
1 @: r# G8 m8 q5 e1 @static struct platform_device da850_evm_tl_leds_device = {) i/ I/ x# y" S4 o3 R6 E7 S' C
.name = "leds-gpio",
& T$ u4 ]( \7 m4 E .id = 1,! k* B# q: ?4 P7 M$ J
.dev = {
7 ]2 [9 k' Y2 L) `3 f, j$ J .platform_data = &da850_evm_tl_leds_pdata, g$ B1 f; r# T! f* e: @3 u1 A9 F
.release = led_dev_release,
0 ^4 Y" Z9 g* k L. X# g$ |6 M" R }
; w2 w f& \* K- j}; @2 d9 z4 u, ]2 ~0 ]& H
/ D4 P) X( e0 Y: y- V# @! g) q& F
static int __init led_platform_init(void)" Y' h5 j, M6 y3 @0 }2 i' Q
{
( z. y0 F2 l) H9 K2 D& n int ret;6 L1 y' Z; b; p- Q
#if 0
& |" U; _: I' }# p4 n; e ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);! `# x; B* P( L- {2 k2 e* O3 D- ?' c# V
if (ret)
# T6 v# F0 J- A" ^8 o pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
5 ]9 I H6 w9 ]* e, [ J/ L) p J7 Z "%d\n", ret);
0 z( \; ~. z+ r: w$ n, n4 D; w#endif8 j5 L3 y9 W/ R7 H/ z( r5 P
ret = platform_device_register(&da850_evm_tl_leds_device);8 B% f n: V6 e: Y; X% l8 ^
if (ret)
( D3 {/ i1 y7 G+ T pr_warning("Could not register som GPIO expander LEDS");
' H k, k" L0 t$ H5 v else& {* S& Y, h- M3 @2 \* X& e
printk(KERN_INFO "LED register sucessful!\n");9 o: q& G% Q; k
5 F% }6 t: P* H1 E return ret; I' t" X: Q2 ]0 _
}0 r* F% C4 M& z2 R
5 \! a! p" k* J8 hstatic void __exit led_platform_exit(void)
. h% w1 o$ g* M0 f5 G" Y7 H{/ Z4 H2 X+ f7 E5 l2 l4 u4 T
platform_device_unregister(&da850_evm_tl_leds_device);3 j: g2 ]: G- B3 {4 s
! s& o6 [& }- Q4 t- [. Q
printk(KERN_INFO "LED unregister!\n");, _& ]+ _2 u; [0 l( S& e
}
% r7 T7 Y) D1 `5 \. d# U
% o" ?# ?6 y; b5 {% I* \module_init(led_platform_init);9 x8 y+ x2 r0 |( P; `
module_exit(led_platform_exit);' f4 b1 _9 _# W7 Q: X; H4 q0 l6 e: s
1 A+ W Q1 a6 r) ~5 J
MODULE_DESCRIPTION("Led platform driver");
+ a9 s) w& N% F' b/ p9 ZMODULE_AUTHOR("Tronlong");2 l- ^! ^+ T1 Z( k8 e
MODULE_LICENSE("GPL");$ B& R4 C3 }- n' l5 O' W0 p
7 a0 D$ P3 x! o, V' m) H
|
|