|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
( x! I0 Y* w4 K9 E! f% g#include <linux/init.h>
1 Y, N. e2 \6 X' x" h* h# ^. W1 q. N8 M#include <linux/module.h>1 N5 H* A2 `+ s% F- ?4 M
#include <linux/kernel.h>
! f+ _: Z- b0 Y. q" v7 i+ T#include <linux/types.h>
4 X# M- C L t% i#include <linux/gpio.h>/ ], r$ f, `# b$ j0 w
#include <linux/leds.h>, w3 u) i9 K, [1 h. D7 h
#include <linux/platform_device.h>
* }: n2 r6 ?- H e3 ]) x* w: z! P# j1 Z; G: i, U/ j" Y3 O
#include <asm/mach-types.h>
' z# Z1 M, g2 w( c0 J( [# Q#include <asm/mach/arch.h>
5 S6 D( o$ u* F) o#include <mach/da8xx.h>3 ]. Q, r; K* N/ C' z4 {- @# ]
#include <mach/mux.h>) g! j" s, y: L! w
, t! a' ~1 h4 p1 l2 i! l' c- G#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 T/ l7 F' @2 F3 `/ I#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
# c+ p. f% {/ \$ H/ C K) p5 Q#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)# `! d) y- k) b+ t& ~
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 e' C0 ?/ Z9 T1 A, Y' G8 V3 U5 |
p3 h# N6 P& }7 e9 a/ J% }/* assign the tl som board LED-GPIOs*/! M( }# E3 D+ e7 d
static const short da850_evm_tl_user_led_pins[] = {
5 B4 W4 D7 F" H5 ~& J /* These pins are definition at <mach/mux.h> file */2 r! i/ H* V7 X" R
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
: H: c$ N/ [1 A -1
. Y: W' z, L7 f};
, q3 q" L) |! \4 H' K: |2 O2 O/ g7 y9 }* c V
static struct gpio_led da850_evm_tl_leds[] = {
+ Z D1 ]: c7 s5 R/ { h& C {4 F: B; J, Z) m- V3 n8 j
.active_low = 0,
3 d% H6 R0 C9 Q3 }# v# Y .gpio = DA850_USER_LED0,
' n, @' B. R5 Q .name = "user_led0",. W4 @* e8 V4 m
.default_trigger = "default-on",, \' G4 S6 ?8 e
},% i. Z" d( a! w k- O- q
{
- ]$ b- P/ h F- X; S .active_low = 0,0 x. v, ^; I9 ~- \: _
.gpio = DA850_USER_LED1," u5 C6 S6 y- t$ \* q* r6 p
.name = "user_led1",
, ^+ j+ K- n( @9 S; b/ Q1 V .default_trigger = "default-on",) @( z* w9 Z' a
},
) T% A9 i* S: z' M+ r+ t+ B) S$ m {# `/ e% F; u- @$ d' k
.active_low = 0,. o5 j8 W& Y8 I+ w* ~* V
.gpio = DA850_USER_LED2,% {! X3 m5 O2 s7 S' H! M
.name = "user_led2",0 c9 p2 b, w! T
.default_trigger = "default-on",
% R* `. t% ]. H },- f+ \5 I4 b# l7 Y" H
{
) O( z4 {4 _8 W .active_low = 0,. F; p4 f0 s, [3 R, R* l
.gpio = DA850_USER_LED3,
# W2 A1 z6 \* Z* r" m6 b2 ?7 h .name = "user_led3",. D3 h* X( X7 V: a7 X0 b+ Q" `( e5 ^0 o
.default_trigger = "default-on",
$ y7 q8 f& t5 i- g" C6 p7 q9 n },( i& U: i0 X; d7 z5 P
};) U- ]( n0 O( C: l k, y
, b2 b3 ?7 c i, h
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {# Y% U3 o; d8 _/ u
.leds = da850_evm_tl_leds,
2 _& m# [3 p" d. U) I) u .num_leds = ARRAY_SIZE(da850_evm_tl_leds),0 [. v! n* i( L
};
- s$ H# N) @) ^8 `8 G4 f' f' {* Z: M7 d
static void led_dev_release(struct device *dev)! n4 i4 V/ R4 t9 m" I. C
{
) T- X7 a( Y$ F g};
4 B& D% Z9 E& y1 Q9 h, S" ^1 y7 S* M9 k
static struct platform_device da850_evm_tl_leds_device = {
( \$ ]+ m9 y3 j6 y1 }% [. ?- U( Y" @! E .name = "leds-gpio",
/ H6 v" g( [/ e5 V$ E/ V .id = 1,
! \: [( J; A" q/ M N$ q* C .dev = {/ V% q" P8 z0 h' l' B
.platform_data = &da850_evm_tl_leds_pdata,/ F0 ~7 H1 B. e5 G! l! F, X0 t; W3 g ]
.release = led_dev_release,3 V+ N9 V+ \9 }6 O
}
/ h5 ^2 m- b6 n}; x1 U- S N" b
% i6 H, f9 z$ t( D! hstatic int __init led_platform_init(void)+ n" `. K' g3 m1 O" k. _2 {" g. R9 K& {
{, s9 N% D5 Q: ]- _( b* {
int ret;' g. B. j+ v4 u) }2 Y' b1 {
#if 0
1 a8 T2 E6 }. |# \6 ^/ o: o$ x ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);# Y! c' e u* Q @
if (ret)0 |5 O9 f% ^- i
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
2 G) K) o3 C2 v% b+ ~ "%d\n", ret);
1 J2 N2 u! o% v& w4 b4 j#endif
$ q8 y5 ]) I6 I4 H5 u5 D+ S ret = platform_device_register(&da850_evm_tl_leds_device);
! H8 m$ d7 p1 t5 q5 y if (ret)
4 I: E7 g- p$ z( r pr_warning("Could not register som GPIO expander LEDS");
% \8 |* {9 m9 _9 _2 |; O% C5 j else+ `# f% `8 m) U1 C4 t" m' ]7 k: o
printk(KERN_INFO "LED register sucessful!\n");' Y# w# k1 c8 I7 W+ G+ R
8 v2 a" [% f8 ?+ V( V
return ret;
( h* K# R$ N1 `+ a1 { [4 S}
: {8 a, X+ u- ^5 g+ Y9 N6 i- P, @# j
static void __exit led_platform_exit(void)
0 `3 N( V; l) H( P# E1 ?{" V+ ?- Z$ X$ F- V; b5 `
platform_device_unregister(&da850_evm_tl_leds_device);
; r- D0 J9 T; M
! F" ]( N4 |" o: M; F printk(KERN_INFO "LED unregister!\n");
/ `3 Y5 T3 [/ K0 ]/ ~, p}. |7 G5 O2 I7 U& ?9 b: l( e2 j
: M6 m& u# ~) G- X- zmodule_init(led_platform_init);
. [2 ~) O0 M; w2 x9 S$ D- M5 mmodule_exit(led_platform_exit);, E( c9 O' J+ [/ s( ~- n
# F ?( b% V3 Q+ O7 Z& e7 E* S tMODULE_DESCRIPTION("Led platform driver");
; O I4 U8 K% gMODULE_AUTHOR("Tronlong");7 q1 x8 H4 o. R* x/ O
MODULE_LICENSE("GPL");
' z# }0 H9 Y! {- o. @0 i) o3 o, y* a1 b4 J( A: U
|
|