|
求大神给下面的程序做注解,请稍详细些,谢谢。- S, y( D4 i( I6 H. b& G
#include <linux/init.h>" j/ ~3 G3 ^+ W' f) A* q
#include <linux/module.h>4 s) U. Z" E8 f8 z
#include <linux/kernel.h>
* D- R7 ]$ f3 X! K#include <linux/types.h>3 ?6 r: |8 j' L4 Z4 y* e+ Q
#include <linux/gpio.h>8 X6 k$ p0 \+ G6 L+ R+ q
#include <linux/leds.h>
; H+ w7 U( q0 D6 [' l#include <linux/platform_device.h>
$ ?5 } n5 {- \- `7 b
# g0 ?( s. z) [7 t6 s; b' X7 ?#include <asm/mach-types.h>
, W, h+ e. ~9 H% J#include <asm/mach/arch.h>: s+ x* @5 e5 [3 s; j9 P
#include <mach/da8xx.h>
3 f. _* u# r$ Y#include <mach/mux.h># V+ \+ @+ f" Y4 M
! X8 e1 N8 X8 q D2 ~#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
- Q9 T$ D) o" x3 w8 L* c) G0 v h#define DA850_USER_LED1 GPIO_TO_PIN(0, 5) S/ ~: e0 P+ a3 V1 P
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)2 g6 R0 {; B" I8 N0 ?3 w6 w4 a
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2). Z% }9 Y9 M L
3 F# V6 h) U# R- E: n
/* assign the tl som board LED-GPIOs*/
& \! g( B6 @' l# t4 h( Sstatic const short da850_evm_tl_user_led_pins[] = {; b7 G3 O0 i! R8 K
/* These pins are definition at <mach/mux.h> file */. }( u7 S# a& K0 ^! b- i- X z1 f9 x
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,3 E5 l0 y' {9 s1 F
-1' k6 m% h# ^, j" I
};
: X7 t2 N6 C* v) a+ i) K
* E& p, d* ?) r' W/ P. h* Ostatic struct gpio_led da850_evm_tl_leds[] = {9 e$ [5 T. Y* X) Z4 m4 L5 L
{# @9 C+ E) E5 W( H; u3 N6 P
.active_low = 0,1 B8 g- `9 s) X' B* p4 n0 i9 L/ j
.gpio = DA850_USER_LED0,/ j7 ?* M, S1 n5 e z' Z8 V- }% |
.name = "user_led0",
( V3 ]8 ]. ]3 k- e1 u5 y% r: i2 K .default_trigger = "default-on",
* b' ~: W1 o" w- w },+ z0 v. \5 g1 ] v2 ?
{
7 y' F& W* G6 {& U& I y- L .active_low = 0,
1 m! r* `9 d9 W .gpio = DA850_USER_LED1,
; |: M, f# a! [6 l .name = "user_led1",* e4 C& ?# U6 [7 l
.default_trigger = "default-on",8 d% C7 w& E8 G" D8 ]
},/ N: v0 O- x$ l2 f2 ?
{
" }. ]" ~/ i- s; T2 r .active_low = 0,: P0 y+ _) C' v
.gpio = DA850_USER_LED2,/ o9 p1 ]9 U1 e& t* g
.name = "user_led2", m2 q& h/ ]9 n0 {) q/ a
.default_trigger = "default-on",$ F- A& I5 D, J1 a$ O5 Q6 m
},6 h3 o; H! e) x! R0 e0 }
{
( j* k/ P4 D1 C' c0 f* D .active_low = 0,1 P* D* d) u: i- Q
.gpio = DA850_USER_LED3,; o7 R; r `( ]8 B# [6 l
.name = "user_led3",; w1 h4 h5 ]: ^; `
.default_trigger = "default-on",4 A, Q6 Y% |, l; c/ o
},: [' `8 S" b- R% Q
};! T4 ?2 T9 X6 R" j k( f
8 A; y, x: {( y, [ l
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
, O1 [( ~" R4 i3 H* P0 s$ L .leds = da850_evm_tl_leds,
% f8 i" {# w5 M4 z. m .num_leds = ARRAY_SIZE(da850_evm_tl_leds),6 K* o9 X) O) p2 m6 Y( \
};
! E. A6 k$ q# b2 c' R( q2 ^: `) I2 X5 h+ ~% I, D8 C
static void led_dev_release(struct device *dev)
+ _5 j) P% H" D{' B# p) X+ S8 R5 ?. l+ o
};
. @: l: I% j! Q; u4 J' ]
/ g* e: H1 F4 Istatic struct platform_device da850_evm_tl_leds_device = {
2 Z2 b# }! Y. y) t: L# @ .name = "leds-gpio",4 r4 V; P, b9 |4 l5 d+ d
.id = 1,
+ L) u' J1 v# M0 o/ T" O .dev = {+ G7 {0 e- {& q& P4 Q& \
.platform_data = &da850_evm_tl_leds_pdata,6 J: \5 ?0 |- {
.release = led_dev_release,
/ {/ j+ |( I4 O0 ^ }
6 q. l; h% J* G" G9 W8 E};( e) ]4 R6 W$ p K9 D7 n
6 r [$ M& x4 ]& @* h5 |" m- p
static int __init led_platform_init(void)
, f" t9 j1 p. a" _{' w S) x( z. u! W
int ret;$ |+ W/ h$ _: ]7 u" n$ M T) w
#if 0' O0 g0 g$ e- q5 Z% j
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 o" @. H1 F5 }% I- P+ b
if (ret) t4 u5 F9 X l. @
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
; T; C4 E. N* F. x: ? "%d\n", ret);
. ^ x. c4 P/ Z; m& h: w. n#endif1 g* N/ I9 i: ~$ h3 X
ret = platform_device_register(&da850_evm_tl_leds_device);
2 q( d. j, m5 P+ }1 w if (ret)
0 m$ _1 w% b, ]# c pr_warning("Could not register som GPIO expander LEDS");
' O4 P1 b$ |1 W% G: Q D# T' h/ @3 u else3 E8 b( c1 A0 C
printk(KERN_INFO "LED register sucessful!\n");
O5 B" p1 h4 |# O" S/ ?/ l \& @( N4 \2 X0 y7 `) a- z
return ret;/ J k* d$ _5 C. }3 p
}
- L& Y, @1 n9 |; c$ u3 A* X& ~+ X2 W& Y; s
static void __exit led_platform_exit(void)5 N; U1 w2 o0 o2 }- ?# j) [
{
; O2 u( @; d+ t8 `; F. ^# i4 c platform_device_unregister(&da850_evm_tl_leds_device);
. l6 B: T- ^7 E
: X- w4 N( F" y, A+ o% N printk(KERN_INFO "LED unregister!\n");
C' S4 S" y/ u# T9 C- _}
9 [# |: S& |5 k' Y. D+ M+ H8 j! h
module_init(led_platform_init);# |) k0 j$ r+ \- v$ H
module_exit(led_platform_exit);
: o( F9 X: t- q3 @/ E
p. E# g3 z9 `6 u; d* N/ C4 `MODULE_DESCRIPTION("Led platform driver");6 ]8 }1 t( r* S, f: Y3 c: v3 ]; x4 _
MODULE_AUTHOR("Tronlong");
" y1 z! E* H$ y4 q- k! } O8 R7 e8 SMODULE_LICENSE("GPL");# _# D, k6 e6 f5 ]. a1 ^
d! {# C. K7 u( D. I |
|