|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 |. o1 g! r5 v4 k0 `3 f#include <linux/init.h>" C U( V+ G" F' i, }
#include <linux/module.h>
4 L1 X9 W6 [1 c! X#include <linux/kernel.h>) E* G5 v! l0 h, G/ O
#include <linux/types.h>
* h( F( V) q$ }2 H7 U. U' l7 u#include <linux/gpio.h>
" G4 C! k' A5 ~0 E ~#include <linux/leds.h>3 ~. H5 S) B3 r: s* B1 ]# f" @
#include <linux/platform_device.h>
: k$ P4 H* a! A6 { }9 T, Z; D2 _3 {: V0 S
#include <asm/mach-types.h>9 E ` k$ x( P, g* S9 @, W
#include <asm/mach/arch.h>; g4 _" ]- W/ g/ b7 c/ S
#include <mach/da8xx.h>
: r: `: a! U8 w9 i#include <mach/mux.h>
0 J8 y8 S5 O. u' g4 {# r3 ~1 M4 @$ V2 s$ O+ c
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)7 I2 s% [' ?5 V) {" g$ [
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
- a$ H9 w' U2 w2 [2 K8 ^- I* O, h) Q5 q#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
) }3 q2 \; N% B$ k- V0 @#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
! }. R6 {/ p% Y0 r- v! _! q9 O/ |+ W7 ^1 l% w1 W
/* assign the tl som board LED-GPIOs*/6 M) n/ b- _ @, B7 n
static const short da850_evm_tl_user_led_pins[] = {5 q, v$ ]: G6 x$ E. C
/* These pins are definition at <mach/mux.h> file */. s: F5 d# x% f% I7 o8 d# X8 a8 M
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
0 |4 L6 d5 a, Z* I$ r! v -1 A& S& m1 ^0 z
};
* @! @6 W# A; L- Y% o
3 E; i5 @2 ?1 A5 Q* l2 pstatic struct gpio_led da850_evm_tl_leds[] = {7 v- `! N% @5 [" Q- n
{
0 h! j9 \. `- v: g7 N' y( M6 T( L .active_low = 0,3 e* A2 L5 k: |( M
.gpio = DA850_USER_LED0,/ h/ V. L) c- K! b6 ]( r( Z5 V
.name = "user_led0",4 F9 e5 I, n, e* m: ]6 z' a
.default_trigger = "default-on",
, J% W% k& b7 b" v0 U Q, n ` },2 O) @- U& D/ O. n; R: d
{* }4 B6 F/ B3 S2 W8 q! _1 N/ `( i& ]& |. ]
.active_low = 0,
8 u( n( e! H Z .gpio = DA850_USER_LED1,; i, d. B+ l2 S+ z2 v0 S) }
.name = "user_led1",
# O3 ]1 l: n% ?( _& k# n; y .default_trigger = "default-on",
# A4 S" [; D$ o+ T },
! S, J$ }3 I, ~. {5 X6 x8 J3 ?$ \ {* S) B6 [! w; n( }& a+ A
.active_low = 0,
) h$ t7 E2 x* R; c K .gpio = DA850_USER_LED2,
7 j7 S, @' ~3 v R .name = "user_led2",; M. h9 ?, `- S( w+ y" y
.default_trigger = "default-on",
) M8 R4 N1 g' y( h },
/ h/ Q" H+ q, @ {- f6 P+ {9 h8 r# l: y2 S
.active_low = 0,* Z5 v' A4 M) B: {
.gpio = DA850_USER_LED3,
- g* n- S/ w+ V- K, J .name = "user_led3",) e' K; p1 k+ y$ l
.default_trigger = "default-on",7 A" |- g w3 I- I9 e# u
},
/ Q1 [" [% D& o/ `3 z% e};
6 d" O3 j: L2 U1 c0 j3 V$ P2 Z; Q9 u b* P% }2 D) |; Y) a
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
' _" }6 H6 h' P2 n2 m .leds = da850_evm_tl_leds,3 I; W5 d9 _3 c
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
" Z+ |! i9 H5 A( S* Q/ T};
' e- g% d# ^4 P: ]) X! @, O0 ~. ]$ A8 o1 o2 {4 O' [. n9 V( s
static void led_dev_release(struct device *dev)1 a4 y9 o: g: V' ?4 _ H) Q
{
: R. {8 ?$ v& R4 f1 Z D. ?: K};6 W. Q6 i# w8 h8 v# R! h6 y
! u. C; a/ X& g" V) H$ C$ O" g5 Cstatic struct platform_device da850_evm_tl_leds_device = {% A2 k. W) y3 _& F& b# c# N
.name = "leds-gpio",
- y' H4 \. A7 L. r5 u .id = 1,
$ w+ r) U' r u0 m& p/ v" G- x f/ C: | .dev = {4 Z' e8 j/ O: T# }8 L0 [5 j4 ^
.platform_data = &da850_evm_tl_leds_pdata,
1 ^, B/ n1 W/ ?/ I# E! u. F .release = led_dev_release,
: `4 u5 O5 T4 _' q) ^) e: Y6 E% u! h }( s; e! e2 e, _# @/ D' E0 ]
};
" M7 S5 Y% W. L ^ c* `- h
: w5 B* j8 @9 P) h% L+ Xstatic int __init led_platform_init(void)
% `3 q' X: @/ L5 @% W{
4 _! E% W& ?3 I2 I6 x6 k& Q4 r3 {5 ]% Q int ret;- i8 T2 [- W# ~1 h2 I: a
#if 0
! _* l m3 O7 N0 J; b6 N ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);% n0 |! s: s! _+ o, V
if (ret)
0 [, }" y1 j9 a$ D' K2 L4 w# a pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
; P% v5 ]* Q) J1 e4 d" w9 N "%d\n", ret);
& g; u. \* @, l2 a8 Z, H#endif9 @' L0 o8 i- U0 y( B+ g
ret = platform_device_register(&da850_evm_tl_leds_device);
% C( x: l. B$ @5 ~# h; T if (ret)
, r' T( g5 W( z: C8 ^ pr_warning("Could not register som GPIO expander LEDS");% b" n2 E0 t+ @& k
else
2 l! n5 N0 r1 C: I! \9 L% [4 E) |5 k printk(KERN_INFO "LED register sucessful!\n");
( k" x, w2 ~) R
5 v3 K# t# n6 p return ret;
% S, ?' `7 e* c5 H4 h+ V}$ a: R8 B4 U: n- ?- H9 l
. ^0 s; v: e0 q) r
static void __exit led_platform_exit(void)
/ z/ N9 L% n T8 U1 Q; y$ I$ z0 I& v{, D, T! T+ f& M; ?
platform_device_unregister(&da850_evm_tl_leds_device);" l* v. i1 v0 g3 t5 y
7 t6 Y1 E1 ^( q# s% @7 s printk(KERN_INFO "LED unregister!\n");
& y! i& ?( a: \2 L) f: _) v4 c9 U}
% L% f% |2 g- h( S# r' z k1 X. D' j8 Q, r
module_init(led_platform_init);
8 ]3 z1 i O. f8 R5 X0 amodule_exit(led_platform_exit);
% a5 ~9 G @1 r% ~ D" t/ s2 Z% z9 C8 g: }* P4 m- Z
MODULE_DESCRIPTION("Led platform driver");' F0 P3 h o7 Y, t& S4 l+ O
MODULE_AUTHOR("Tronlong");) }$ {$ h, p. b% e/ ]9 z
MODULE_LICENSE("GPL");0 b3 J2 d1 f9 k5 S; [0 p5 {
& Q$ J* c# H, e/ m( _) |- v1 [
|
|