|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
! a% R% s0 b9 P# P4 Z% C# i#include <linux/init.h>
! g" U0 q" L. e5 Q( @+ H#include <linux/module.h>
$ S) f4 }$ V8 Q) X#include <linux/kernel.h>8 E( u; H7 y* W1 e% `' O, L) ~# a7 ?
#include <linux/types.h>
9 k2 x* N" L8 Y X$ F, K#include <linux/gpio.h>; a. r3 s) X) ]1 y$ z
#include <linux/leds.h>
- o0 o$ R8 c3 n o# t#include <linux/platform_device.h>/ `' o- v+ Y6 B3 _& `
4 O m: [, I R( U6 m- j' d: c
#include <asm/mach-types.h>$ Y% M. T% `+ w) T
#include <asm/mach/arch.h>- A( m9 X2 R4 }4 i6 u
#include <mach/da8xx.h>4 Q8 s$ p' Y0 g! Q0 C% y" u& F
#include <mach/mux.h>2 _ X+ d0 P: W( A4 q
& V5 A- ^/ o8 X+ |#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
4 P0 Z! Q3 ]" d, ?2 L* u, H#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
/ [+ W' [: b4 O* C9 K. G6 w#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); a9 D3 w, p2 q& |3 j( x
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) A! N3 ~) D( F9 e' \; V6 j" \9 x
+ X8 ]0 q# C. X7 V/* assign the tl som board LED-GPIOs*// x! }+ I, t5 O! ^
static const short da850_evm_tl_user_led_pins[] = {
4 ? A% D1 ]8 Z+ W /* These pins are definition at <mach/mux.h> file */
2 N8 D. H( S* b$ l DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
5 y9 ~) s" `) W8 D6 W- Q$ U2 r -1: F8 R. M. a% B- R: E2 x4 z
};
1 K5 _+ M' I) N) Q T/ I- p4 [
. J F& @6 n, ` J; Y: N6 Ostatic struct gpio_led da850_evm_tl_leds[] = {
1 t8 {+ F7 t/ o( A5 z8 q" v {- S/ g) P/ M5 S+ I, Q1 z7 t) `& s
.active_low = 0, v- Y9 B! @4 f) B! B, X9 A
.gpio = DA850_USER_LED0,8 q" N7 [" u- d: s3 N1 O T
.name = "user_led0",
8 m: i8 \1 f3 n5 i n) L- K/ A .default_trigger = "default-on",/ x5 }! w0 ^7 a8 y
},
0 X7 f% d0 _: T) ]! a" U- X {* C* X& O2 A$ j/ A
.active_low = 0,
+ C* P9 J% q _6 |0 v% ~ .gpio = DA850_USER_LED1,/ n* k# M8 m9 p) F+ W
.name = "user_led1",
) Q. V; M* x. z8 p* e5 _ .default_trigger = "default-on",
$ z0 t+ C3 s/ c7 a/ o },
5 k* x4 Q+ g3 C8 {$ C% r ^ {
# x2 E% w8 q4 a/ ~1 a5 c- l9 q1 _ .active_low = 0,
& z9 V+ \9 @! q( s8 |1 z6 w .gpio = DA850_USER_LED2,! J* b; M, U7 P; ^3 O* }
.name = "user_led2",2 H2 h' P( Z! b
.default_trigger = "default-on",
0 ~' J6 u6 Q4 v6 X },7 x2 o7 P2 U2 o) ]% O+ q
{& |% P. Y; T1 u* f, i; K2 c B$ s
.active_low = 0,
; p+ V; e/ ?+ S( }8 H .gpio = DA850_USER_LED3,8 o- s9 R/ R8 B# {. B4 E, G
.name = "user_led3",5 p! {* d; S0 K# V- G" J
.default_trigger = "default-on",
1 z1 [& f6 P, t* D1 w6 ` },
" B7 }$ K& e4 J7 u# i};
* V1 Z5 ~7 a7 | h1 f% X/ K, s! G& r3 b
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
8 F+ g" ~6 o( r6 Z: ?0 M .leds = da850_evm_tl_leds,
% l1 ^" {/ ]4 v- i7 D .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
g, [" f2 K% Z$ A8 `};* U+ O7 r v* Z
# p# Z( N5 e5 z4 C1 F
static void led_dev_release(struct device *dev)- |! n3 Z7 r* C0 B6 Z
{7 }- T6 A& |. Y0 l
};6 ~, _* g9 M8 S% \' ^7 [
3 n: W- t* {( m" W* gstatic struct platform_device da850_evm_tl_leds_device = {
& L2 W' f! a, C6 Z2 i .name = "leds-gpio",4 O+ v" w) J( h) C1 F
.id = 1,
: n ^; S" q! z2 \/ Y; V3 ]' m .dev = {( n# p8 ~0 o! i/ X. }
.platform_data = &da850_evm_tl_leds_pdata,7 l' e( z2 O' b; z- h/ ?: c ~
.release = led_dev_release,
& F, T8 f% a0 m8 J8 }& U* B }" }- C4 e: b% w6 c! a
};5 V1 h% x0 J" ?% L
# U" Q5 G/ L! K, n7 F/ Gstatic int __init led_platform_init(void)+ Q. M( v8 W* E" Z3 |& \
{
# {2 C& L" _' F5 ~4 y2 F int ret;
1 u4 R# C8 @4 C#if 0
2 X3 d+ L2 U1 [* | ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);) L. E* o$ W, ^5 [. ]& U
if (ret)& H% p( p" V1 z5 R. h
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
- a2 @, Y( {- A. j. Q0 M "%d\n", ret);
" D( z/ H* T# H( x6 @ G' j#endif% z: g/ Q7 S. U, { {( X
ret = platform_device_register(&da850_evm_tl_leds_device);, M) ~) o$ z& Y% a7 R t o. u. D
if (ret)- t& s* y8 m* P& M3 @; C8 K
pr_warning("Could not register som GPIO expander LEDS");# C' p4 d. k* O7 v0 Q) _
else8 \+ l% U" l) B3 U8 w$ u3 i
printk(KERN_INFO "LED register sucessful!\n");
' ?' W: w2 Z) q, S
0 e0 {8 O6 S" s- s3 A0 I9 K return ret;8 g+ |# @4 K P& s# y% ~
}, j2 p/ @1 M& f8 m5 `6 [
9 `2 A9 n6 ]4 V2 k* Y9 S! istatic void __exit led_platform_exit(void)' w7 k9 I. y% k3 d8 _8 [
{
- A- }# O7 @9 N3 D2 f1 ^ platform_device_unregister(&da850_evm_tl_leds_device);% l/ z; g* t; e1 C
" s1 L' r0 X. I3 X: K. H
printk(KERN_INFO "LED unregister!\n");2 }& x! n# J2 t5 ~1 b
}
, P7 `! B! K5 V6 K1 D* M+ u
. \( U8 f7 ? q1 b+ n7 x' x$ Emodule_init(led_platform_init);
5 G5 L- G8 ^4 z( }/ L5 Dmodule_exit(led_platform_exit);' g) v& h$ `5 w
" O% v* r6 _- OMODULE_DESCRIPTION("Led platform driver");
3 m# ^0 }# d# _, }$ lMODULE_AUTHOR("Tronlong");& L: q3 F" M U& B: } F
MODULE_LICENSE("GPL");5 Q: ]6 o0 w o) o
: X2 _8 z& ?; |9 a! Q5 z$ j7 j |
|