|
|
求大神给下面的程序做注解,请稍详细些,谢谢。! [" K7 S0 p+ z2 F: w
#include <linux/init.h>
" J1 \# w6 R' W9 G2 X* ^#include <linux/module.h>9 s7 y6 V( N2 P+ k9 n6 L& L4 B& X C
#include <linux/kernel.h>
, o7 @4 z) _+ F' _3 Z7 k1 a#include <linux/types.h>4 k* i+ v2 k( ?5 J, g" m* Y+ D
#include <linux/gpio.h>
$ L- M$ g% F+ D, Q S7 D4 I#include <linux/leds.h>
; }7 q1 Z/ v( \- M Q* `9 {: u; k#include <linux/platform_device.h>1 N7 D" b5 T* J# u9 C$ E* R+ B' T
$ q$ o2 X8 A$ s$ N6 J; Z
#include <asm/mach-types.h>- d2 U" z8 W$ r. ^. ~# p
#include <asm/mach/arch.h>2 j6 {+ S- N' i& a& b/ s# C6 }4 T2 F
#include <mach/da8xx.h>& c. G) c. l9 y) B
#include <mach/mux.h>
/ B& G! M; @" G! R
5 X, q% a1 _, }4 A8 u! P#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
2 M5 v, m! q& q" {6 C% _4 a#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)( p* o+ b& R. x/ I3 M
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1), B S! F. h4 {
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)# E5 e$ \ V& U4 V
4 A" m7 F; i7 Y5 }1 A9 y
/* assign the tl som board LED-GPIOs*/* ~! }/ C; ~( H
static const short da850_evm_tl_user_led_pins[] = {
( }0 ], i5 @4 q, f, D; l/ `3 X /* These pins are definition at <mach/mux.h> file */
5 u" g8 g9 ]7 F8 Q( a% s( ^ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
2 h2 A; H, |2 S6 G0 `% m3 U+ b -1
$ a4 t; ^1 l. J% H};
" S- E$ F( j) F) N" n7 T- z5 `- H. e& n2 ~
static struct gpio_led da850_evm_tl_leds[] = {" |3 |1 E! m: b# N7 Z" d
{" _' l3 E2 J0 z! U) y; J V
.active_low = 0,8 `) X9 J" D- b% h) o8 i
.gpio = DA850_USER_LED0,- v0 X0 ~& \% D! X( ?9 p
.name = "user_led0",
& x9 m& T; Z R K. n .default_trigger = "default-on",# X: A0 G. [& N, N. U
},4 H' n+ X# @# k+ m, B9 j
{
. E" ^( B7 i4 J( ? .active_low = 0,* C/ J! _ M$ Z; P" _
.gpio = DA850_USER_LED1,: ~7 N `6 L: l, |7 G" ~1 I2 ^
.name = "user_led1",
7 Y6 n, J2 d3 M. D3 M .default_trigger = "default-on",
$ _0 d5 z4 v& R7 o+ u: d$ o9 k },
8 {% k6 N! Y: v [# P1 X0 X# @1 d {% z" P/ T b; H; [# f& L% |/ Y
.active_low = 0,# o- B7 J$ C. P
.gpio = DA850_USER_LED2,9 O/ C* Q8 @9 l! d! o0 P; j
.name = "user_led2",
' j! E9 L, @. u q- ~* @0 y' t" x- ? .default_trigger = "default-on",
" Z( p6 @" V1 l3 _- E4 ^ z },
; [2 i6 E& T) c+ ^ {- l" F& h4 |( k) Z4 p; }/ R
.active_low = 0,
; Q n1 O1 ^, T. U' F( d6 w .gpio = DA850_USER_LED3,
t+ q O" C; @9 D .name = "user_led3",
3 u4 u1 q6 z, a# f; Y% w& e .default_trigger = "default-on",7 I( X% T) c: b; z
},0 J# u8 r! Q7 k2 r7 _( S
};
- z* C0 X- x( g, N; @- J& e9 N) U! D" V4 M: B8 o4 g7 N# ^
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
$ A9 h& @% B& N0 J( z* |/ E .leds = da850_evm_tl_leds,: h5 [- \! u- Q( l4 A
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),3 f/ T# }* k+ A5 P& x
};. e; X" I3 m! z9 `9 m3 r
$ f) r/ T+ W0 K; p# W: b
static void led_dev_release(struct device *dev)
% _5 N# f% O0 A: o2 f& _{' }5 q" m' z7 W
};# V5 L4 n) d+ ~3 d5 q
- N) v. [1 ]7 y) B }" ?* ?' Hstatic struct platform_device da850_evm_tl_leds_device = {
8 u/ ]0 i4 b' d$ t- `1 w0 v .name = "leds-gpio",
0 Q0 |6 @, y' I0 V7 k .id = 1,
2 K3 @6 G# V) }7 d! A .dev = {
' `$ Y X4 `; u: R .platform_data = &da850_evm_tl_leds_pdata,: Q+ z- ~+ k: K$ W3 A; I6 [( S3 `
.release = led_dev_release,
5 q- r. ?: w1 L9 u- |9 C }9 q% W$ P2 R: T) V
};5 H u& {$ R: s+ a" T6 K
( j7 J# T v5 ]! K$ T
static int __init led_platform_init(void)
) x3 k; _5 a2 H{- H- ~/ F% h; b1 q; T5 d& g8 f
int ret;
3 ?3 t# M5 b9 |- z5 a) k#if 0# Q# J* T. P4 w) v3 v; R: G4 h
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
: I- ?1 S7 K ~. o' ^+ ` if (ret)6 H; A! \3 k* c! c" W
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"5 E" u" L/ y# N' V+ W
"%d\n", ret);" |% F8 N4 M4 ^& a$ w& a" o
#endif
" S7 g4 O$ d9 i: j ret = platform_device_register(&da850_evm_tl_leds_device);( O3 T- \4 B$ D, ~) B9 q
if (ret)4 @; H7 F* _6 \
pr_warning("Could not register som GPIO expander LEDS");
8 p3 x" ^, u: p3 \ else5 t5 z& p3 M* v/ U6 f
printk(KERN_INFO "LED register sucessful!\n");' Z0 r. Y! U: k) x' K; I
0 {) S. _# U* U. r
return ret;" s. m2 x* ]- Q: F. A
}& m# r) F' v& m7 Z* F2 H
4 o; O r j3 q
static void __exit led_platform_exit(void)
7 P( o; j4 j+ y! a* L6 v v, R- P{
; A& y# M- q& w4 |! u" U5 {7 L1 @' f platform_device_unregister(&da850_evm_tl_leds_device);
4 N0 Y n% L1 n* C" J/ {; A- }7 }" H: ~1 }, g8 F' s( G" A
printk(KERN_INFO "LED unregister!\n");) Q" K7 f1 D" K9 W; d
}
! K* w, m! J- o3 C. Y5 o& |$ T( ]0 ]% P
module_init(led_platform_init);
! ^/ J6 h/ E. k7 Z* ` amodule_exit(led_platform_exit);
$ S3 l9 p2 |) t6 {3 c
- C: u2 a# Q9 {. TMODULE_DESCRIPTION("Led platform driver");
4 L! J' f% G/ }' SMODULE_AUTHOR("Tronlong");5 H- x5 y' c; ], B6 g. E& O. D& Z/ K
MODULE_LICENSE("GPL");& q/ Q" [/ z( t- G2 _3 ~4 l
7 b) x0 a4 p, O# q, `- x
|
|