|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
: E, ?7 ? n( L#include <linux/init.h>% a. T. [0 D9 ^ q" c* q
#include <linux/module.h>3 i) _( L% F* P. L: S0 \! s8 n3 s
#include <linux/kernel.h>
/ y% d% u( r) O2 B1 b#include <linux/types.h>
( Z! t8 M7 o$ J8 `/ U& ^) l1 Z, X#include <linux/gpio.h>! ]) f+ s @2 |$ M \
#include <linux/leds.h>
8 Q# ?* X' f; ^/ v% v q#include <linux/platform_device.h>
0 n/ t' U% s/ v, A" C* n# _0 |
. F: H/ F+ h+ J0 T#include <asm/mach-types.h>
7 ^* p5 y# t6 M& v5 j3 C#include <asm/mach/arch.h>& O2 f+ @. }0 O2 W. `$ s
#include <mach/da8xx.h>
2 L$ k ]& L0 ^4 z4 S% J8 t: G# }#include <mach/mux.h>1 Y) l' v+ T) e' `3 \+ [, ]5 j
$ o) z) y8 b; o& q8 X' k! b
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0): i7 k! _' W% O& J
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)7 t: p2 m N L: C1 }
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1). F3 k6 |8 }+ N7 v9 a+ d3 `6 z
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
1 \( W8 t& N$ R; t9 _9 B' I f& u0 Y- M2 z4 t/ _
/* assign the tl som board LED-GPIOs*/
2 E9 E% y. j7 }4 b9 P2 e+ X' astatic const short da850_evm_tl_user_led_pins[] = {4 r5 y" Z+ o' U4 ]% q) A0 b* N# ~
/* These pins are definition at <mach/mux.h> file */) j' b+ ] O) [
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
0 e+ j9 G* S3 B i; _+ Z- l4 | -13 a V3 Y; b5 {9 ^' F- v; m
};
5 Z! s% _* |) r/ ?& k0 ] f, M5 W+ p0 K, n% x! G
static struct gpio_led da850_evm_tl_leds[] = {: D7 G, {/ l) \3 v
{, T/ K# P+ ]; p$ T$ t3 Y# ` u5 Y
.active_low = 0,
9 k- o$ G" g6 s: w' ? .gpio = DA850_USER_LED0,3 K! N$ Y* g/ J
.name = "user_led0",4 Z- v0 u# o+ J1 R
.default_trigger = "default-on",. D$ t/ z' t6 \* q: w' S
},. \! W* s7 ?2 c& z
{
a$ v0 N/ ~% u, j$ k" ? .active_low = 0,. L0 e( R0 z D& {3 q& a" }
.gpio = DA850_USER_LED1,/ Q/ N0 S- C ?
.name = "user_led1",1 V( i5 n, i3 g A6 C
.default_trigger = "default-on",
% l& l/ {! J6 H2 T3 [2 @ },
3 Y$ T$ ~/ |# Z( Q: c {
9 j! S; o* t$ m4 K% ~1 S3 ~ .active_low = 0,
4 m: i: Q0 I/ ^0 ^2 t, j .gpio = DA850_USER_LED2,
% C! U$ o# I& h7 { .name = "user_led2",3 u7 j& P7 V- ]4 i
.default_trigger = "default-on",3 x' @" _5 A2 I5 n% T
},2 K' R' a' `. d# i* N2 M$ Y8 v
{1 e+ H. F/ Q+ J. k: B0 {0 t
.active_low = 0,
: k9 J; C! g0 N/ [5 {% i5 J .gpio = DA850_USER_LED3,! P' e7 L+ w" q. ]5 @) _3 d
.name = "user_led3",
) J$ ^+ d# q9 X$ t; K: F2 G .default_trigger = "default-on",! K7 j+ F9 _0 R" d" B' U
},+ Z7 Q5 H5 d1 e/ q3 Z h R: P
};- L6 V6 K' ^% ~- S8 G$ T! n
, L1 A2 |; u1 y
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 ] {1 Z) b3 q, m$ S3 @, V
.leds = da850_evm_tl_leds,, J t V9 B k$ c. L L" M2 g
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
$ z" t* v# u4 [+ b5 }* k0 N};7 a' c$ l d1 t% A* \
5 u+ E6 C+ M8 n9 P& W! ?2 ?3 T0 Y
static void led_dev_release(struct device *dev)
$ T7 |2 r3 d1 b{; {' w4 V& ~3 c6 ]% Z% G' W
};
3 R* T/ J- `/ N5 S) L9 { Z/ I/ s+ Q0 Q! y
static struct platform_device da850_evm_tl_leds_device = {
; G, f, |0 z- D: d$ Q, R .name = "leds-gpio",
' d1 E9 S# U7 d6 {& K0 Q, G9 W) [ .id = 1,
% S, v7 f$ |2 ?# T/ r2 H3 r .dev = {
' y; F5 i7 d" \! n/ w" d .platform_data = &da850_evm_tl_leds_pdata,
; s( n* M- w. Q4 ~* S T. B5 i .release = led_dev_release,$ w! ^9 c4 O- c1 p. @ U* B
}
( S6 F5 p, C0 |6 A$ M: x# z};& y. O' x! m4 z2 U
8 [2 m1 B; ?: _6 ^static int __init led_platform_init(void)
. Y2 z3 x8 j2 M; j# ~* D8 b{, F! s1 }$ r* }7 [* ]! K/ g
int ret;% L4 U" o6 _+ V& r
#if 0
* l- N2 Q) @7 c ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
' [& d2 }) ^* j; N: \# ?0 { if (ret)) Y: c2 ^& @' O) e
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"+ t4 ~- t8 h( _8 z
"%d\n", ret);
# S( `" O U- f2 @$ Z* h7 Z) H; Y; H#endif9 q9 K# w2 f4 @9 V( y
ret = platform_device_register(&da850_evm_tl_leds_device);
5 ^* q5 G) k' F, { if (ret)
1 @( S% f7 B5 G6 m* @4 y4 v1 s, w f pr_warning("Could not register som GPIO expander LEDS");+ ]: r- M. y6 @0 s: |
else
& \% Y* W7 q8 K3 A& y6 { printk(KERN_INFO "LED register sucessful!\n");' S! A; h, t( K+ _ Z$ J5 n
5 ]9 O2 b! _% Z& O; R2 X
return ret;
* L1 ~) }( P5 a, |% k, f}
I; D1 p/ C3 q
4 n, B1 l2 |# @5 Mstatic void __exit led_platform_exit(void)9 o7 p3 g# [0 n
{
4 ?+ P. L \% f" u platform_device_unregister(&da850_evm_tl_leds_device);" X( V( B, }; I( Z" p0 _4 W
4 m2 R2 r: M9 o printk(KERN_INFO "LED unregister!\n");
( {+ J/ ], \1 U8 ?6 `}' M, r5 T1 k# U) m# m+ W
/ N+ |# J; F# u, l/ q
module_init(led_platform_init);; P" c+ v( i% A5 @( `& t
module_exit(led_platform_exit);( n: V& ~" m8 h
2 i) j# ~7 q9 c* W9 F: g3 QMODULE_DESCRIPTION("Led platform driver");
0 y6 I" \6 i) c3 h9 ~MODULE_AUTHOR("Tronlong");8 l1 E3 t6 ]6 z. K7 ~7 o
MODULE_LICENSE("GPL");
5 O0 z8 U9 `) ]+ Z0 F2 z$ f, s4 F4 F& B0 M) L. q$ ?
|
|