Пример #1
0
static int __rtl8366_smi_write_reg(struct rtl8366_smi *smi,
                                   u32 addr, u32 data, bool ack)
{
    unsigned long flags;
    int ret;

    spin_lock_irqsave(&smi->lock, flags);

    rtl8366_smi_start(smi);

    /* send WRITE command */
    ret = rtl8366_smi_write_byte(smi, smi->cmd_write);
    if (ret)
        goto out;

    /* set ADDR[7:0] */
    ret = rtl8366_smi_write_byte(smi, addr & 0xff);
    if (ret)
        goto out;

    /* set ADDR[15:8] */
    ret = rtl8366_smi_write_byte(smi, addr >> 8);
    if (ret)
        goto out;

    /* write DATA[7:0] */
    ret = rtl8366_smi_write_byte(smi, data & 0xff);
    if (ret)
        goto out;

    /* write DATA[15:8] */
    if (ack)
        ret = rtl8366_smi_write_byte(smi, data >> 8);
    else
Пример #2
0
int rtl8366_smi_write_reg(struct rtl8366_smi *smi, u32 addr, u32 data)
{
	unsigned long flags;
	int ret;

	spin_lock_irqsave(&smi->lock, flags);

	rtl8366_smi_start(smi);

	/* send WRITE command */
	ret = rtl8366_smi_write_byte(smi, 0x0a << 4 | 0x04 << 1 | 0x00);
	if (ret)
		goto out;

	/* set ADDR[7:0] */
	ret = rtl8366_smi_write_byte(smi, addr & 0xff);
	if (ret)
		goto out;

	/* set ADDR[15:8] */
	ret = rtl8366_smi_write_byte(smi, addr >> 8);
	if (ret)
		goto out;

	/* write DATA[7:0] */
	ret = rtl8366_smi_write_byte(smi, data & 0xff);
	if (ret)
		goto out;

	/* write DATA[15:8] */
	ret = rtl8366_smi_write_byte(smi, data >> 8);
	if (ret)
		goto out;

	ret = 0;

 out:
	rtl8366_smi_stop(smi);
	spin_unlock_irqrestore(&smi->lock, flags);

	return ret;
}
Пример #3
0
int rtl8366_smi_read_reg(struct rtl8366_smi *smi, u32 addr, u32 *data)
{
    unsigned long flags;
    u8 lo = 0;
    u8 hi = 0;
    int ret;

    spin_lock_irqsave(&smi->lock, flags);

    rtl8366_smi_start(smi);

    /* send READ command */
    ret = rtl8366_smi_write_byte(smi, smi->cmd_read);
    if (ret)
        goto out;

    /* set ADDR[7:0] */
    ret = rtl8366_smi_write_byte(smi, addr & 0xff);
    if (ret)
        goto out;

    /* set ADDR[15:8] */
    ret = rtl8366_smi_write_byte(smi, addr >> 8);
    if (ret)
        goto out;

    /* read DATA[7:0] */
    rtl8366_smi_read_byte0(smi, &lo);
    /* read DATA[15:8] */
    rtl8366_smi_read_byte1(smi, &hi);

    *data = ((u32) lo) | (((u32) hi) << 8);

    ret = 0;

out:
    rtl8366_smi_stop(smi);
    spin_unlock_irqrestore(&smi->lock, flags);

    return ret;
}