|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
( d% @0 A3 V2 L6 J#include <linux/init.h>- W C: i+ y/ p; D" J5 x
#include <linux/module.h>
; I4 T* ?7 L+ A4 q2 D) a#include <linux/kernel.h>
% Q! x- J5 M% i1 w" t; \5 K#include <linux/types.h>8 v) f0 Z4 E4 X3 R2 q- o
#include <linux/gpio.h>4 Q9 I( z" X, ~& t! m, `
#include <linux/leds.h>
# [6 |7 k) h8 I. ~) H8 ?6 k( L7 n#include <linux/platform_device.h>- `1 ^5 f# v* O& C# J: h0 T- j
* K9 z; W% L" Z0 N
#include <asm/mach-types.h>
* c5 E" ^- w* e#include <asm/mach/arch.h>2 n5 d1 ~% b7 y2 D* ]4 G
#include <mach/da8xx.h>" D! [ X3 Z8 I K9 X' w; \9 b; J0 R
#include <mach/mux.h>
2 x; [! N5 l- h* {3 J8 |) ~, e1 R7 T5 G- M6 u
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)& g# v! ]5 u, q/ M) A) @; K$ [, r4 \
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)3 i8 E+ k! ~# U; B
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)8 j9 w6 t5 n6 x9 H1 u. E% ^
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
7 k* H5 i \+ [ D
$ ~: L+ d# O0 S5 F F# @7 E9 R/* assign the tl som board LED-GPIOs*/
5 r e5 B* `- B; P% U2 S5 x1 ]static const short da850_evm_tl_user_led_pins[] = {
1 B0 Q3 S% X$ [8 s$ s' d; t3 z) L /* These pins are definition at <mach/mux.h> file */
* `' Y8 ?, I# a Q( I+ D L: o DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
# ?+ O. _5 y" ]) {3 H -1
/ Z% k( I0 Q; m$ k};
9 v0 |8 i$ p1 u* d, W) A7 D' k, F9 I" B6 j a% e5 H
static struct gpio_led da850_evm_tl_leds[] = {7 c! j+ g5 E" T# L! q0 n
{
% T. f' l U6 w7 P7 U4 d" s% A4 k .active_low = 0,) r- Y+ o6 l+ o0 I
.gpio = DA850_USER_LED0,' u; F1 X- j) J
.name = "user_led0",. b: w& C& X! y8 X
.default_trigger = "default-on",
) I, K7 c3 e; E h1 }7 F }, v( k+ f4 o* t$ M
{6 R: u8 k+ `4 q; p7 e! i
.active_low = 0,
2 e$ x. R. z; g; l, y3 h .gpio = DA850_USER_LED1,9 t) a; L( ~+ G' I# x" e
.name = "user_led1",/ {% M3 D- C3 z0 I; h
.default_trigger = "default-on",2 s( b8 h; q5 n7 {
},# q4 h! M6 h+ i" e, M% _
{
% Y- R- @# l: w. M" \' R# E .active_low = 0,5 m& @, |! U9 C9 A+ H
.gpio = DA850_USER_LED2,6 f8 ?( }# W Z- B
.name = "user_led2",0 q; j$ a( K& C& r0 w! B
.default_trigger = "default-on",
- ^4 i+ u- Q% _1 @% {8 V W },
$ i* u2 J( j, C" R {& |4 h8 e" t" ? ]6 I
.active_low = 0,
) a8 n3 G/ h( r1 L# n( d/ b' U .gpio = DA850_USER_LED3,2 I( r& p; T, `
.name = "user_led3",
9 i1 w- y; a' S. V% t6 O .default_trigger = "default-on",
# A* u- y% j( N7 U5 c) l) } },
# W) ?5 ?% {4 F% s8 q1 q4 D* B};
8 E0 p! `* X0 |* m: x: S$ b" E( \2 J. n2 Q- \
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
% w. O6 A1 q, G; B .leds = da850_evm_tl_leds,& ~6 N. d+ {# W
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),! U* a4 S4 g( s/ \. ?# w
};; L6 E5 ?/ s* |- S* X
1 W. B. |- k1 Q; X; a
static void led_dev_release(struct device *dev)
& \1 C; P& J+ v) z3 R9 }{
8 P( x! K# W4 x7 q};' t, R1 m+ z4 N* ^* R
. Z' j+ h' M+ @; Y7 N, y1 v
static struct platform_device da850_evm_tl_leds_device = {# A$ C% C# n3 k1 }+ d
.name = "leds-gpio",
) Y! u6 W+ v- o) f' s .id = 1,# Q& E! G9 M: r
.dev = {9 s! Y$ K) n: N9 L
.platform_data = &da850_evm_tl_leds_pdata,
' u, m! y3 Y9 N .release = led_dev_release,5 C% B9 L+ Y" W
}
7 O" Q9 e1 Z6 I W) [* `% _# E/ |};; C1 }' \7 r9 ~2 l8 b' }
, P! G# G8 R0 P' Astatic int __init led_platform_init(void)0 E* z( ?& p2 G9 L( h5 h ?
{1 ~) G; l( Q g* y
int ret;+ E( v/ e6 z3 U" \& J# L8 V- d
#if 0
/ b- x. Y. W- w& u% d ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
0 I R/ z K# Q+ O ^4 J5 G if (ret)
u( D, I9 ]0 H- ]/ ?! t/ B pr_warning("da850_evm_tl_leds_init : User LED mux failed :") I" @7 K7 |; V: g
"%d\n", ret);
" K$ p8 m% ~2 |! R" V#endif$ Y! `; c3 p. [& u2 j
ret = platform_device_register(&da850_evm_tl_leds_device);
2 C0 T( d# e& B' g& S if (ret)
7 b1 M- ]- D2 f8 d pr_warning("Could not register som GPIO expander LEDS");
, f* e- J4 u8 j7 d5 h1 w: a% j else
, V! g9 ^& A$ a1 e9 C3 i printk(KERN_INFO "LED register sucessful!\n");* V6 [2 R5 P, }( _; g
: i) a( c [1 d J" h return ret;
B6 `4 Z/ `/ Q+ M}5 y+ d2 s( r2 f# |, F: @, |' a& y
! Y1 K7 }0 r, v% ~2 J! t) O, q/ L, ^static void __exit led_platform_exit(void)
* G5 p% ^ ~) y; F$ h. ^# t{+ a+ ]' z0 f& c. u" G
platform_device_unregister(&da850_evm_tl_leds_device);( U$ N' E+ R, {' u3 E
* f7 e! e4 ^7 X0 m printk(KERN_INFO "LED unregister!\n");( Y$ S3 \9 i+ w9 C) n; o; I
}6 Q3 r% x& T6 U$ }$ [% ?* Z
9 D& A8 V' a4 ^' v+ A$ Z: J! `0 }" D
module_init(led_platform_init);
$ e$ _& j4 P. z/ k% V" M7 J% Wmodule_exit(led_platform_exit);4 D! i0 q$ Y5 B
% b( S- t: ^8 s7 G" z& {5 V; v
MODULE_DESCRIPTION("Led platform driver");
/ I) f& P( e/ j% {4 T) r, ~MODULE_AUTHOR("Tronlong");
& U: R7 @% B U7 C' n( T, hMODULE_LICENSE("GPL");- T) }# _+ m* v* u9 G
4 H% v8 v9 U1 D; N! t3 Q: J |
|