|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. H' ]: M+ X/ u5 Q q3 l5 Z' k
#include <linux/init.h>
. H8 x# ~" s! S" p/ M#include <linux/module.h>
, p* Q- K" ]# d, _' i#include <linux/kernel.h>4 W; H/ n" X+ ]; ^3 w
#include <linux/types.h>
3 J, E" {- L3 M#include <linux/gpio.h>
5 ]4 x4 f$ ]' L n$ O8 R! n#include <linux/leds.h>
9 n) i5 M; ^) G, w#include <linux/platform_device.h>
4 v# T7 q5 q, L$ |. B4 E4 p& v1 n! z5 H( p p1 c# o% N, D: U
#include <asm/mach-types.h>
) j# q+ e+ P( h& k y#include <asm/mach/arch.h>& J2 H1 |6 [4 l/ T. u. R4 r
#include <mach/da8xx.h>
9 x) J* L/ B' G( c( e#include <mach/mux.h>
( W# V7 z/ F J4 {1 o U6 O
* S+ p: h/ a) H( f0 w4 |#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)2 j( d D( q8 h- G6 [) N
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5): E5 B! s( V: D: y
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
# x- u" H5 E+ F$ a5 O# ^2 s' J#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
" G; S% i. q& A# ]$ }9 T- n
" S# S) R# Q' L& \/* assign the tl som board LED-GPIOs*/% Q+ n! E. ^: S" N$ x1 w
static const short da850_evm_tl_user_led_pins[] = {4 F: z! O& u' X
/* These pins are definition at <mach/mux.h> file */
+ _% a2 u7 b5 t3 k DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- R/ f" a# W. O3 o8 \
-1
. q/ X5 J3 T3 Y& E; g& W};
* |, H) K4 _6 g1 T6 |( D5 E5 H. y# b5 Y1 G3 `
static struct gpio_led da850_evm_tl_leds[] = {& _- R6 l: `& k8 X4 D( a' @
{
+ ?( A( P8 [* W( N .active_low = 0,$ O# B! k5 T% E! z3 ]& m; j
.gpio = DA850_USER_LED0,
. F. g' O; |* J6 D; M+ e .name = "user_led0",! U& S# n2 v8 `
.default_trigger = "default-on",
: G9 c0 J& s$ s- b7 R }, z/ a0 T% z; E' H$ b
{
8 Y H- [" o0 K4 a! n3 i .active_low = 0,- W: V5 A2 V( m9 H7 I) Z
.gpio = DA850_USER_LED1,
3 S# X7 L, P9 X- h( m9 `) W .name = "user_led1",
) e4 h% W2 I6 v4 B2 Q2 U4 A .default_trigger = "default-on",
. [0 \$ _1 t9 o n( C: v/ }- k9 B },
* q, r2 T6 [' ~! j9 K {' E0 Y, B7 r- ~& N( o
.active_low = 0,7 y* V% d W6 Z, O
.gpio = DA850_USER_LED2,
" s- ~+ o/ R, R9 t0 e1 _% a .name = "user_led2",
6 G/ v1 m4 o- ?- q( G$ |7 y .default_trigger = "default-on",
. j0 M! B% ?7 Z4 C2 Z T" P& _ },
( n& B* L. t/ I& u2 c) r( x k {; N1 D7 b! r' p+ G7 _
.active_low = 0,3 |9 P8 u! I" b( f% T
.gpio = DA850_USER_LED3,
1 @/ q( G* {) ~3 h3 Z( w .name = "user_led3",+ m8 a8 P C, j& }& Y* ?
.default_trigger = "default-on",3 M, r5 Y( w3 E. o4 K2 _
},2 J9 @- [% b, ? B( l
};1 T9 @$ Q3 Q! f% u6 F, F
1 q+ Q8 B) P3 U6 P# b8 T" {0 J8 ]
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
" g+ Z# J" l" Z0 V .leds = da850_evm_tl_leds,
! A0 y! j& T* @; v, Y .num_leds = ARRAY_SIZE(da850_evm_tl_leds),( S/ n& d) n( v4 K
};
- u, ^2 H3 _4 ^, g# Q6 N, B: s9 A$ m
static void led_dev_release(struct device *dev), r" x. k' V# z/ C/ e/ \( U
{
0 C& K+ m: d* ?. l3 y7 U! K};; [8 K/ o' {3 L1 Q a
3 z) F! l! C7 k% Qstatic struct platform_device da850_evm_tl_leds_device = {
' |/ f* ]& p% e! m .name = "leds-gpio",
% ?$ S* j& `6 W .id = 1,
0 i+ Y( U0 X' C3 `) q .dev = {7 z! y1 D( |$ c+ C' {) f3 O
.platform_data = &da850_evm_tl_leds_pdata,2 t8 p: R7 o0 c* S L Z$ u$ R2 [
.release = led_dev_release,* y' Z* o# i8 p
}
! p- u8 d I1 X) F};: T4 f" I8 p6 m, s: G
7 \6 C8 u* P* f& D8 G
static int __init led_platform_init(void)4 L: @+ O& X/ v' R. t; l% ?& w
{
4 O, ]4 q2 }) T5 O, t: U int ret;/ V. z; @4 x* z9 X2 \$ V
#if 0; R7 C3 J6 v4 Y! u- m% ?7 ]6 [
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);- h$ ~ q& [+ w8 L
if (ret)
* X$ W1 _: ^* l- M pr_warning("da850_evm_tl_leds_init : User LED mux failed :"( H8 f( t, |# L8 M1 a( ]
"%d\n", ret);
7 g9 w' y: L9 ?/ n: J#endif
" Q0 _! j9 a3 u T ret = platform_device_register(&da850_evm_tl_leds_device);0 K3 E; _" d% ?: E3 Z$ B4 s" W& |( @
if (ret)
$ I; u1 ]( @. U, {" K' k' `8 c+ q. q( Q pr_warning("Could not register som GPIO expander LEDS");
+ D0 S% [9 ` |# z else
' E- K7 F- H, H! Y+ T+ O5 g printk(KERN_INFO "LED register sucessful!\n");
- ?8 a9 v- j/ Y O5 |4 `2 I- L, V' C, x
: |$ c) G5 X# p2 J3 E return ret;
% |2 V+ y! Y/ M. E3 ?, {& z}( y/ v, o" m1 u* Z0 T: t! X
. ^% S) p; s! m6 ?/ Y
static void __exit led_platform_exit(void)+ @2 Z/ Y# R9 D
{% \+ R5 n$ C3 b# r/ _9 v* z
platform_device_unregister(&da850_evm_tl_leds_device);
: x2 u5 u# x% V8 y0 F
2 n3 L1 b; [. M' \' w3 w printk(KERN_INFO "LED unregister!\n");! z: `0 M+ F: Z/ ~" H1 @
}
4 N8 Y: C( z- W" C+ h/ f4 n
# g' o' ~# x) g! smodule_init(led_platform_init);
. O" A: v0 ]1 g) X4 Vmodule_exit(led_platform_exit);
7 z, M2 I7 I: K- x# ` L- ~* L0 M$ T+ g- Q! m
MODULE_DESCRIPTION("Led platform driver");
# U$ l7 _" _# }- P( b7 BMODULE_AUTHOR("Tronlong");
0 K" {; l/ V0 K& F& Z6 X* F4 D8 w6 QMODULE_LICENSE("GPL");
3 v' i# E8 n2 X; e y
Q+ G8 S3 m; ?2 ]) q1 g) _. H |
|