|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 W: a% O A* l3 ], K6 B$ x
#include <linux/init.h>
; a: b! d7 T5 q* `" u#include <linux/module.h>7 {% P5 H' v; }! A/ Z* k
#include <linux/kernel.h> U/ I+ F, r u. _) \, c9 l4 z
#include <linux/types.h>+ T. z+ Z" w7 W9 E" F y
#include <linux/gpio.h>
. H; s5 I" m1 I7 G2 \6 N' F( R#include <linux/leds.h>$ i: T: i# x% \
#include <linux/platform_device.h>: ]1 V K6 N' q! q/ x9 B
) L# B+ S5 }9 v3 q3 q#include <asm/mach-types.h>
4 |) f. s1 G- J5 D#include <asm/mach/arch.h>
3 e" p9 W1 {, S9 D; h#include <mach/da8xx.h>
' F6 [+ a3 F Q& f3 ?' w$ D, v5 o, P#include <mach/mux.h>
/ L% _/ {+ s1 d$ N! P+ ?9 H3 }' W. H* \5 d: {
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 m+ f8 C- e2 k- U! M( r+ w b) e' L#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
: H4 @4 J3 b9 Y. E: E6 i#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
3 F8 b" r* ` j! c6 {3 z#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)& ~- S- N" l; k" z( p) _' z
2 V- ]/ m4 Z: Z" _- V1 V: @/* assign the tl som board LED-GPIOs*/) K ~0 K: o1 y9 c4 [
static const short da850_evm_tl_user_led_pins[] = {
# d1 b# I9 ?* t9 h8 x8 \ /* These pins are definition at <mach/mux.h> file */
+ ^) R* f4 R, N6 W! p; f/ ~+ a. U9 U: C DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
( l/ Y$ A! x( m" L -1
) p# u7 e, u6 ?) \};
! g5 K. g, m+ u
% B) p3 _: ~- i* y0 g+ }, L4 Hstatic struct gpio_led da850_evm_tl_leds[] = {
: N4 W8 m5 z: t, k' j3 @$ G {# T3 b1 l& e% g8 o4 o6 f& Q0 D7 R
.active_low = 0," Q: g% o, s0 E9 a2 c* P
.gpio = DA850_USER_LED0,
! p/ x) Q( U0 ^# x; ~. G$ g) M' T .name = "user_led0",
# i. u2 v) k- u$ K4 M3 c, ` .default_trigger = "default-on",
4 D) a5 j0 j1 L$ @. I8 p- U$ D% {) e },' E7 ]: |1 N- F2 Z
{
; \% N2 v! U- s! l a3 [ .active_low = 0,. p N1 [. C9 k2 n; E2 o+ V
.gpio = DA850_USER_LED1,: Y! N$ o$ p) j% E: [ O
.name = "user_led1",/ ]' _# N% R# w% q! S6 a5 ^4 s
.default_trigger = "default-on",
0 g6 d% M- }5 x! Z6 I7 P$ d, u3 C },
7 o7 Y r) z9 k; D r- D" m {
2 H! ~) _9 ~/ c/ h+ i .active_low = 0," n1 B% h ]5 M1 r9 U" d
.gpio = DA850_USER_LED2,1 B. ~/ X! a. w/ v* |. [6 a
.name = "user_led2",: |6 i- U/ f% ]6 ~1 {, G& K& h
.default_trigger = "default-on",
' ] b1 O: W7 N. u6 c$ n },& a! t& N, e" S4 E, B, r' A5 \
{$ x1 l5 o7 ]) S" k& {
.active_low = 0,& @8 l5 h5 P# r& B8 L
.gpio = DA850_USER_LED3, F; n; ~& S: N" w* N6 i' M
.name = "user_led3",% K8 c3 e5 f1 r5 Z, k1 ~ o# R
.default_trigger = "default-on",
! W: _6 L, Q" y4 I+ F, l. q& E },
& Z9 y, ? k, a5 w( q0 V j};
7 d1 L# ?; m9 c! V' _
: y) T; {$ d0 o! k9 H/ F" t& T. Zstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
* ?/ [4 B3 p; k8 ? .leds = da850_evm_tl_leds,
3 y) U1 }& N6 K .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
" o9 E* |2 _; O};
" M/ j2 Q+ B9 c4 k, o: U# W! k! Z) W* l
static void led_dev_release(struct device *dev)
5 E2 m6 o6 Q. m: H{
W2 P4 A# \5 L" I3 b5 ~( X1 l0 r};
^0 C9 [+ G% f& ^4 d
, c1 \! I3 Y2 T2 O- V( Ostatic struct platform_device da850_evm_tl_leds_device = {4 A+ h. u. j" c9 m( E1 ]
.name = "leds-gpio",
" F! C$ z1 ?7 e5 g .id = 1,$ T0 I. @5 w1 f4 B9 s" B c
.dev = {
" c' J. _% r+ v" j* v .platform_data = &da850_evm_tl_leds_pdata,
/ f) @. |& T% c2 ]$ t! F$ \ .release = led_dev_release,
" E" u' d9 [3 N Z5 \ }
9 `6 D" A. C0 A( X$ P};
/ V1 c, {8 x) b5 ~5 x. E# {3 Z/ m+ ]4 A) E" }
static int __init led_platform_init(void)
4 R. z7 ?( v# F" I8 ~{4 L9 Z9 ?6 J- x, O
int ret;! n: W8 i2 g, {
#if 0
( j7 M8 z+ U, B# A N ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( Y Q/ v. b" v; k D: l if (ret)
7 K/ g9 |. G4 b5 \7 Q pr_warning("da850_evm_tl_leds_init : User LED mux failed :"; a1 O6 J8 m' ~! l7 W, U1 T
"%d\n", ret);' I4 W) ~* ]* s" k/ A
#endif$ u' s3 q3 d; E
ret = platform_device_register(&da850_evm_tl_leds_device);9 j: ] U, W1 a; N* o
if (ret)
6 _, b% C e2 q pr_warning("Could not register som GPIO expander LEDS");
- _2 Q' K5 I1 G: E% d1 B: J# p else+ q! o& \+ a9 i, M9 y3 M) m. v/ H
printk(KERN_INFO "LED register sucessful!\n");) N C! ^. i+ M+ k
! B. Q p' E, |( N0 J: ` return ret;
5 E, o6 x! p% |+ z6 V4 g6 u8 O& Q5 r0 E}- T- ^9 K; [" S5 [
3 R' f3 f1 a/ A& R j
static void __exit led_platform_exit(void)/ b# }; A2 o2 [3 @# t
{" S7 `1 d9 g' u5 k, W
platform_device_unregister(&da850_evm_tl_leds_device);( @8 @/ y/ L0 n% n. v
6 p( o3 V( ], c- o6 n printk(KERN_INFO "LED unregister!\n");' I& @" a! K7 K, p9 \; K7 ?+ Z
}* j2 `& ]8 A, B0 d* @& I8 i; m
( h$ E+ x; M3 M/ @& J- `. @module_init(led_platform_init);3 V3 g9 m, W) f% j' O) d
module_exit(led_platform_exit);
# @# O7 {. s, j8 V& @( n
# \) E( \& j; |# C! @( ?0 z0 A% VMODULE_DESCRIPTION("Led platform driver");
, U5 ?, |2 X# P/ `+ V5 N/ IMODULE_AUTHOR("Tronlong");+ Q- p# s$ u& y
MODULE_LICENSE("GPL");
5 [* [2 G$ n/ l
" J, Y2 D" c: b& y/ Z: A |
|