一. 格式

1. 函数定义需要这行的话,应该和’(‘对齐
This line should be aligned with the opening ( above.

static inline int handle_lsr_errors(struct uart_port *port,
                                    unsigned int *flag, unsigned int *lsr)


2. 向已有的文件添加内容,应该按照字母排序地去添加

对于社区中有一些老代码本就不是按照字母排序的方式排列定义,那就保证我们自己的添加是按照字母排序的就好。


3. #include头文件,按照字母排序罗列

对于社区中有一些老代码本就不是按照字母排序的方式排列定义,那就保证我们自己的添加是按照字母排序的就好。



二. 变量

1. void类型的指针,不许要做转换,可直接复制给任意类型指针变量。
    No need to cast a void pointer.

static inline void sprd_rx(int irq, void *dev_id)  
{  
     struct uart_port *port = (struct uart_port *)dev_id;
     ...




三. 函数

1. 请不要使用unlikely做判断,除非有确凿的证据说明unlikely能提高效率。编译器和cpu已经知道0是正常的返回值。
NEVER use unlikely unless you can measure the difference without it.
And even then, you better be able to justify it.  For something as dumb
as this type of check, you are working against the complier and cpu which
already knows that 0 is the usual response.

2. 调用ioremap()函数需要做返回值判断 

Return value of ioremap() should be checked for NULL.

up->membase = ioremap(mem->start, resource_size(mem));


3. 调用devm_request_irq()函数,需注意irqflags。

如下代码片段: irqflags = IRQF_SHARED,如果是这样的情况,就要注意在handle_irq()函数中判断,当前处理的中断是否为this device触发的,如果不是,需要在handle_irq()函数中返回IRQ_NONE。

ret = devm_request_irq(port->dev, port->irq, handle_irq,
                       IRQF_SHARED, sp->name, port);
static irqreturn_t handle_irq(int irq, void *dev_id)
{
    ...    
    ims = serial_in(port, SPRD_IMSR);
    if (!ims)
        return IRQ_NONE;
    ...
    return IRQ_HANDLED;
}


四. 头文件

尽量不要包含与体系结构相关的头文件,

如. 我们在sprd_serial.c中包含了asm/irq.h,遭到吐槽。

> why is a modern driver using asm/irq.h in the
> first place.
>
> We used to include that file when platforms defined IRQ numbers
> statically, but modern platforms don't do that, so it shouldn't be
> required anymore.


五. 注释说明和文档

  1. 每个dts中的compitible string都要添加binding说明

每个compitible string要能明确的代表节点,不要用过于通用的compitible string,比如下面是不合格的:

uart1: serial@70100000 {
        compatible = "xxx,serial";
        ...

应该改成"xxx,sc9836-uart"



六. DTS

1. aliases 节点应在所有节点前面定义