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
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; }
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; }