|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 N' Q; A; P: n1 ?
#include <linux/init.h>4 C* c" T( ~5 b# t5 E
#include <linux/module.h>
6 Q- r' q% J; K" u$ B& H#include <linux/kernel.h>. Y) m7 p8 p$ F4 k, j0 r6 ^" X
#include <linux/types.h>! v9 `) X' p. }: [
#include <linux/gpio.h>& ?3 Z+ y- k$ w4 [2 p( g/ e& a
#include <linux/leds.h>3 M6 o0 m H5 e
#include <linux/platform_device.h>
A0 S$ C7 F" k1 z* @9 |! K) S- W) L8 Q( x2 q9 Q- `0 ^
#include <asm/mach-types.h>3 K" U4 T; m- r- @) l. |. |
#include <asm/mach/arch.h>
. ~% y7 p# ?' l6 V: h+ ~' C#include <mach/da8xx.h>
/ G# i/ `' T; I0 b- x( x#include <mach/mux.h> |6 {( Z! W# I; t
& B6 c5 K4 }5 q8 k; g# ?7 [$ R
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% g/ C3 v9 E% T7 w6 C" [8 ^#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)/ H5 Z# X' f$ y4 b
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
. l e+ N$ v' ? e3 t8 a#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)$ Q1 b5 N8 ?7 D: [
; i9 ]0 y2 n) `2 i+ z1 W
/* assign the tl som board LED-GPIOs*/5 Q* @5 ]! u4 j
static const short da850_evm_tl_user_led_pins[] = {# W, D" d2 O0 E, i9 ]( X6 @0 N* x
/* These pins are definition at <mach/mux.h> file */
3 C$ Y# d( D1 ~1 N DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
& _' M8 ~3 `* b$ b* n! {9 x' a- I -1
. R% q5 C5 w! b1 ~};
) \; h8 \8 h' N$ j3 C+ b) ~
2 f# ~2 U' X2 M$ e( Y0 c8 wstatic struct gpio_led da850_evm_tl_leds[] = {
6 J! P! o+ I* j$ q5 T {3 {5 g' T( g& Q* A6 C% Q
.active_low = 0,
' Y3 @+ {/ k: U1 U .gpio = DA850_USER_LED0,
1 ]; N) o5 V/ n+ r .name = "user_led0",
7 e) j; Q. Q& l) `' p .default_trigger = "default-on",1 ~/ b. W- b# ~) ]
},( S% c& D0 v4 I; ?; [6 z' S
{
: L* ^ `' M: `1 ]" A. O .active_low = 0,; y4 }$ T/ T4 B- R% d0 a
.gpio = DA850_USER_LED1,
- E# d' H; Z! s: q( x8 ^- v .name = "user_led1",. l: F# |0 P. y
.default_trigger = "default-on",9 _' G3 [# b& M+ g4 N' _
},
* X9 Y# W+ i ~7 H- K4 R j {, Y0 N- Q5 }( C$ _
.active_low = 0,
b- l3 M$ @% ^6 \/ n2 I .gpio = DA850_USER_LED2,6 e! x! Y; U% B# C4 z% n
.name = "user_led2",
, @8 k% I8 L5 k5 k, h .default_trigger = "default-on",
' Z) |; h) q! l, d },
3 ~. k4 \& [2 Y: f8 k4 V* w {
: I8 v A$ g, n3 [& _# m .active_low = 0,1 H% e& x' Q& |& s# Y& R( D
.gpio = DA850_USER_LED3,
/ g8 |1 h3 e1 @" }4 k .name = "user_led3",9 A' h: G6 R* c C) H: i9 w# P
.default_trigger = "default-on",
% o5 h6 H5 I1 g5 i, |6 P' u },
3 N8 b$ |/ u/ `* b( s};. q- o! `. u% D4 h
" J9 ~8 n: |' x9 @9 `; qstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
1 m7 r* f! L* |# S .leds = da850_evm_tl_leds,
, m/ O. k$ P, r3 R# m: m. Q4 ]# I9 c .num_leds = ARRAY_SIZE(da850_evm_tl_leds)," b' h: h- i O8 Z0 r$ G
};
" s) j: t% |5 \' |6 s; C8 y
) I4 @* a% A% T6 o, Istatic void led_dev_release(struct device *dev)
2 y3 q, J' J" M+ K9 p/ I; A% w8 X{' @: R( Y3 p d% Q
};
4 o* L# U% L" d4 w
0 V+ H# `* _$ [; o4 a sstatic struct platform_device da850_evm_tl_leds_device = {4 q1 F; g0 {4 f: t T( S, M% J
.name = "leds-gpio",! B4 }! f F2 {+ g! T* j2 \6 P
.id = 1,. `4 P, g3 s0 d1 x
.dev = {
$ D; U! K7 G+ z! A .platform_data = &da850_evm_tl_leds_pdata,
* [: b' v1 \+ M4 V" k .release = led_dev_release,
* w+ S1 f: H7 C9 L( F }
5 j8 j R% }, ? T% |; L. a};; k3 Z" ]. n5 U3 e- z; B9 X% T
$ `+ `1 y" B* y- l$ @static int __init led_platform_init(void)! H% {; J$ N3 \; H# s
{4 s }. t& [+ x
int ret;
+ y! c; A+ f, P/ b. \#if 03 P3 H) x2 E6 Z
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
" U/ d1 m: i4 ]/ n7 K if (ret)
1 q, w5 N$ F4 v# _& ]1 j pr_warning("da850_evm_tl_leds_init : User LED mux failed :"+ P6 |1 {9 |7 U% i
"%d\n", ret);
. N- A- B7 r4 w, r1 T#endif
! P$ L3 q% O. R$ ]1 U; H ret = platform_device_register(&da850_evm_tl_leds_device);$ G# F# J" ^8 T/ K/ w
if (ret)4 c" J' {% m2 a' @2 q; z
pr_warning("Could not register som GPIO expander LEDS");
( r$ G$ m4 }) b/ U else, i- W6 X" k' ?* S& h5 T# N9 v
printk(KERN_INFO "LED register sucessful!\n");, ]( i; F, }4 x9 C6 {. C& R
; ~# U' ? ]3 P% s8 T return ret;3 T% C4 Z+ l- G* }; W& v
}
0 H6 o- c8 |- X
- u) {0 } t8 Q; Ostatic void __exit led_platform_exit(void)
2 N, ~ Q6 a$ L' u# A; a7 F. I$ B V. O- |{0 `3 K% n% p8 W7 T+ x- ?) \
platform_device_unregister(&da850_evm_tl_leds_device);9 Z) R. `) m. D
, K5 q) M, o5 J" }$ [; z; r$ D- _9 Q printk(KERN_INFO "LED unregister!\n");2 i0 C. {4 ]% L, q1 a' g
}8 i# @5 g: ^! G- D2 M
m- ^& T; ]4 L5 t5 n. L9 k. k4 k1 l
module_init(led_platform_init);9 }9 {6 k1 P4 H: y5 Z
module_exit(led_platform_exit);
7 y$ D, c$ o" s8 O! t3 p" x" _7 m0 R4 g* i3 n
MODULE_DESCRIPTION("Led platform driver");
' c! b* ]7 P2 v: q( TMODULE_AUTHOR("Tronlong");$ {/ x6 k/ I% u+ ?6 A5 o+ Z" Y
MODULE_LICENSE("GPL");: b0 h* B: Q2 l& y8 P
4 U" A- Z o; c! V6 s |
|