Lines Matching refs:dev
84 static inline u16 hpi_read_reg(struct c67x00_device *dev, int reg) in hpi_read_reg() argument
87 return __raw_readw(dev->hpi.base + reg * dev->hpi.regstep); in hpi_read_reg()
90 static inline void hpi_write_reg(struct c67x00_device *dev, int reg, u16 value) in hpi_write_reg() argument
93 __raw_writew(value, dev->hpi.base + reg * dev->hpi.regstep); in hpi_write_reg()
96 static inline u16 hpi_read_word_nolock(struct c67x00_device *dev, u16 reg) in hpi_read_word_nolock() argument
98 hpi_write_reg(dev, HPI_ADDR, reg); in hpi_read_word_nolock()
99 return hpi_read_reg(dev, HPI_DATA); in hpi_read_word_nolock()
102 static u16 hpi_read_word(struct c67x00_device *dev, u16 reg) in hpi_read_word() argument
107 spin_lock_irqsave(&dev->hpi.lock, flags); in hpi_read_word()
108 value = hpi_read_word_nolock(dev, reg); in hpi_read_word()
109 spin_unlock_irqrestore(&dev->hpi.lock, flags); in hpi_read_word()
114 static void hpi_write_word_nolock(struct c67x00_device *dev, u16 reg, u16 value) in hpi_write_word_nolock() argument
116 hpi_write_reg(dev, HPI_ADDR, reg); in hpi_write_word_nolock()
117 hpi_write_reg(dev, HPI_DATA, value); in hpi_write_word_nolock()
120 static void hpi_write_word(struct c67x00_device *dev, u16 reg, u16 value) in hpi_write_word() argument
124 spin_lock_irqsave(&dev->hpi.lock, flags); in hpi_write_word()
125 hpi_write_word_nolock(dev, reg, value); in hpi_write_word()
126 spin_unlock_irqrestore(&dev->hpi.lock, flags); in hpi_write_word()
132 static void hpi_write_words_le16(struct c67x00_device *dev, u16 addr, in hpi_write_words_le16() argument
138 spin_lock_irqsave(&dev->hpi.lock, flags); in hpi_write_words_le16()
140 hpi_write_reg(dev, HPI_ADDR, addr); in hpi_write_words_le16()
142 hpi_write_reg(dev, HPI_DATA, le16_to_cpu(*data++)); in hpi_write_words_le16()
144 spin_unlock_irqrestore(&dev->hpi.lock, flags); in hpi_write_words_le16()
150 static void hpi_read_words_le16(struct c67x00_device *dev, u16 addr, in hpi_read_words_le16() argument
156 spin_lock_irqsave(&dev->hpi.lock, flags); in hpi_read_words_le16()
157 hpi_write_reg(dev, HPI_ADDR, addr); in hpi_read_words_le16()
159 *data++ = cpu_to_le16(hpi_read_reg(dev, HPI_DATA)); in hpi_read_words_le16()
161 spin_unlock_irqrestore(&dev->hpi.lock, flags); in hpi_read_words_le16()
164 static void hpi_set_bits(struct c67x00_device *dev, u16 reg, u16 mask) in hpi_set_bits() argument
169 spin_lock_irqsave(&dev->hpi.lock, flags); in hpi_set_bits()
170 value = hpi_read_word_nolock(dev, reg); in hpi_set_bits()
171 hpi_write_word_nolock(dev, reg, value | mask); in hpi_set_bits()
172 spin_unlock_irqrestore(&dev->hpi.lock, flags); in hpi_set_bits()
175 static void hpi_clear_bits(struct c67x00_device *dev, u16 reg, u16 mask) in hpi_clear_bits() argument
180 spin_lock_irqsave(&dev->hpi.lock, flags); in hpi_clear_bits()
181 value = hpi_read_word_nolock(dev, reg); in hpi_clear_bits()
182 hpi_write_word_nolock(dev, reg, value & ~mask); in hpi_clear_bits()
183 spin_unlock_irqrestore(&dev->hpi.lock, flags); in hpi_clear_bits()
186 static u16 hpi_recv_mbox(struct c67x00_device *dev) in hpi_recv_mbox() argument
191 spin_lock_irqsave(&dev->hpi.lock, flags); in hpi_recv_mbox()
192 value = hpi_read_reg(dev, HPI_MAILBOX); in hpi_recv_mbox()
193 spin_unlock_irqrestore(&dev->hpi.lock, flags); in hpi_recv_mbox()
198 static u16 hpi_send_mbox(struct c67x00_device *dev, u16 value) in hpi_send_mbox() argument
202 spin_lock_irqsave(&dev->hpi.lock, flags); in hpi_send_mbox()
203 hpi_write_reg(dev, HPI_MAILBOX, value); in hpi_send_mbox()
204 spin_unlock_irqrestore(&dev->hpi.lock, flags); in hpi_send_mbox()
209 u16 c67x00_ll_hpi_status(struct c67x00_device *dev) in c67x00_ll_hpi_status() argument
214 spin_lock_irqsave(&dev->hpi.lock, flags); in c67x00_ll_hpi_status()
215 value = hpi_read_reg(dev, HPI_STATUS); in c67x00_ll_hpi_status()
216 spin_unlock_irqrestore(&dev->hpi.lock, flags); in c67x00_ll_hpi_status()
221 void c67x00_ll_hpi_reg_init(struct c67x00_device *dev) in c67x00_ll_hpi_reg_init() argument
225 hpi_recv_mbox(dev); in c67x00_ll_hpi_reg_init()
226 c67x00_ll_hpi_status(dev); in c67x00_ll_hpi_reg_init()
227 hpi_write_word(dev, HPI_IRQ_ROUTING_REG, 0); in c67x00_ll_hpi_reg_init()
230 hpi_write_word(dev, SIEMSG_REG(i), 0); in c67x00_ll_hpi_reg_init()
231 hpi_read_word(dev, SIEMSG_REG(i)); in c67x00_ll_hpi_reg_init()
237 hpi_set_bits(sie->dev, HPI_IRQ_ROUTING_REG, in c67x00_ll_hpi_enable_sofeop()
243 hpi_clear_bits(sie->dev, HPI_IRQ_ROUTING_REG, in c67x00_ll_hpi_disable_sofeop()
250 static inline int ll_recv_msg(struct c67x00_device *dev) in ll_recv_msg() argument
254 res = wait_for_completion_timeout(&dev->hpi.lcp.msg_received, 5 * HZ); in ll_recv_msg()
263 u16 c67x00_ll_fetch_siemsg(struct c67x00_device *dev, int sie_num) in c67x00_ll_fetch_siemsg() argument
267 val = hpi_read_word(dev, SIEMSG_REG(sie_num)); in c67x00_ll_fetch_siemsg()
269 hpi_write_word(dev, SIEMSG_REG(sie_num), 0); in c67x00_ll_fetch_siemsg()
276 return hpi_read_word(sie->dev, USB_CTL_REG(sie->sie_num)); in c67x00_ll_get_usb_ctl()
284 hpi_write_word(sie->dev, USB_STAT_REG(sie->sie_num), bits); in c67x00_ll_usb_clear_status()
289 return hpi_read_word(sie->dev, USB_STAT_REG(sie->sie_num)); in c67x00_ll_usb_get_status()
294 static int c67x00_comm_exec_int(struct c67x00_device *dev, u16 nr, in c67x00_comm_exec_int() argument
299 mutex_lock(&dev->hpi.lcp.mutex); in c67x00_comm_exec_int()
300 hpi_write_word(dev, COMM_INT_NUM, nr); in c67x00_comm_exec_int()
302 hpi_write_word(dev, COMM_R(i), data->regs[i]); in c67x00_comm_exec_int()
303 hpi_send_mbox(dev, COMM_EXEC_INT); in c67x00_comm_exec_int()
304 rc = ll_recv_msg(dev); in c67x00_comm_exec_int()
305 mutex_unlock(&dev->hpi.lcp.mutex); in c67x00_comm_exec_int()
313 void c67x00_ll_set_husb_eot(struct c67x00_device *dev, u16 value) in c67x00_ll_set_husb_eot() argument
315 mutex_lock(&dev->hpi.lcp.mutex); in c67x00_ll_set_husb_eot()
316 hpi_write_word(dev, HUSB_pEOT, value); in c67x00_ll_set_husb_eot()
317 mutex_unlock(&dev->hpi.lcp.mutex); in c67x00_ll_set_husb_eot()
322 struct c67x00_device *dev = sie->dev; in c67x00_ll_husb_sie_init() local
326 rc = c67x00_comm_exec_int(dev, HUSB_SIE_INIT_INT(sie->sie_num), &data); in c67x00_ll_husb_sie_init()
332 struct c67x00_device *dev = sie->dev; in c67x00_ll_husb_reset() local
338 rc = c67x00_comm_exec_int(dev, HUSB_RESET_INT, &data); in c67x00_ll_husb_reset()
344 hpi_write_word(sie->dev, HUSB_SIE_pCurrentTDPtr(sie->sie_num), addr); in c67x00_ll_husb_set_current_td()
349 return hpi_read_word(sie->dev, HUSB_SIE_pCurrentTDPtr(sie->sie_num)); in c67x00_ll_husb_get_current_td()
354 return hpi_read_word(sie->dev, HOST_FRAME_REG(sie->sie_num)); in c67x00_ll_husb_get_frame()
360 hpi_set_bits(sie->dev, USB_CTL_REG(sie->sie_num), HOST_MODE); in c67x00_ll_husb_init_host_port()
365 if (!(hpi_read_word(sie->dev, USB_CTL_REG(sie->sie_num)) & HOST_MODE)) in c67x00_ll_husb_init_host_port()
376 hpi_set_bits(sie->dev, HPI_IRQ_ROUTING_REG, in c67x00_ll_husb_reset_port()
378 hpi_set_bits(sie->dev, HOST_IRQ_EN_REG(sie->sie_num), in c67x00_ll_husb_reset_port()
382 hpi_set_bits(sie->dev, USB_CTL_REG(sie->sie_num), PORT_RES_EN(port)); in c67x00_ll_husb_reset_port()
387 void c67x00_ll_irq(struct c67x00_device *dev, u16 int_status) in c67x00_ll_irq() argument
392 dev->hpi.lcp.last_msg = hpi_recv_mbox(dev); in c67x00_ll_irq()
393 complete(&dev->hpi.lcp.msg_received); in c67x00_ll_irq()
398 int c67x00_ll_reset(struct c67x00_device *dev) in c67x00_ll_reset() argument
402 mutex_lock(&dev->hpi.lcp.mutex); in c67x00_ll_reset()
403 hpi_send_mbox(dev, COMM_RESET); in c67x00_ll_reset()
404 rc = ll_recv_msg(dev); in c67x00_ll_reset()
405 mutex_unlock(&dev->hpi.lcp.mutex); in c67x00_ll_reset()
416 void c67x00_ll_write_mem_le16(struct c67x00_device *dev, u16 addr, in c67x00_ll_write_mem_le16() argument
423 dev_err(&dev->pdev->dev, in c67x00_ll_write_mem_le16()
431 tmp = hpi_read_word(dev, addr - 1); in c67x00_ll_write_mem_le16()
433 hpi_write_word(dev, addr - 1, tmp); in c67x00_ll_write_mem_le16()
438 hpi_write_words_le16(dev, addr, (__le16 *)buf, len / 2); in c67x00_ll_write_mem_le16()
445 tmp = hpi_read_word(dev, addr); in c67x00_ll_write_mem_le16()
447 hpi_write_word(dev, addr, tmp); in c67x00_ll_write_mem_le16()
455 void c67x00_ll_read_mem_le16(struct c67x00_device *dev, u16 addr, in c67x00_ll_read_mem_le16() argument
463 tmp = hpi_read_word(dev, addr - 1); in c67x00_ll_read_mem_le16()
469 hpi_read_words_le16(dev, addr, (__le16 *)buf, len / 2); in c67x00_ll_read_mem_le16()
476 tmp = hpi_read_word(dev, addr); in c67x00_ll_read_mem_le16()
483 void c67x00_ll_init(struct c67x00_device *dev) in c67x00_ll_init() argument
485 mutex_init(&dev->hpi.lcp.mutex); in c67x00_ll_init()
486 init_completion(&dev->hpi.lcp.msg_received); in c67x00_ll_init()
489 void c67x00_ll_release(struct c67x00_device *dev) in c67x00_ll_release() argument