Lines Matching refs:drvdata

230 static int hwicap_command_desync(struct hwicap_drvdata *drvdata)  in hwicap_command_desync()  argument
238 buffer[index++] = hwicap_type_1_write(drvdata->config_regs->CMD) | 1; in hwicap_command_desync()
247 return drvdata->config->set_configuration(drvdata, in hwicap_command_desync()
264 static int hwicap_get_configuration_register(struct hwicap_drvdata *drvdata, in hwicap_get_configuration_register() argument
284 status = drvdata->config->set_configuration(drvdata, in hwicap_get_configuration_register()
290 status = drvdata->config->get_status(drvdata); in hwicap_get_configuration_register()
303 status = drvdata->config->set_configuration(drvdata, in hwicap_get_configuration_register()
311 status = drvdata->config->get_configuration(drvdata, reg_data, 1); in hwicap_get_configuration_register()
318 static int hwicap_initialize_hwicap(struct hwicap_drvdata *drvdata) in hwicap_initialize_hwicap() argument
323 dev_dbg(drvdata->dev, "initializing\n"); in hwicap_initialize_hwicap()
328 dev_dbg(drvdata->dev, "Reset...\n"); in hwicap_initialize_hwicap()
329 drvdata->config->reset(drvdata); in hwicap_initialize_hwicap()
331 dev_dbg(drvdata->dev, "Desync...\n"); in hwicap_initialize_hwicap()
332 status = hwicap_command_desync(drvdata); in hwicap_initialize_hwicap()
340 dev_dbg(drvdata->dev, "Reading IDCODE...\n"); in hwicap_initialize_hwicap()
342 drvdata, drvdata->config_regs->IDCODE, &idcode); in hwicap_initialize_hwicap()
343 dev_dbg(drvdata->dev, "IDCODE = %x\n", idcode); in hwicap_initialize_hwicap()
347 dev_dbg(drvdata->dev, "Desync...\n"); in hwicap_initialize_hwicap()
348 status = hwicap_command_desync(drvdata); in hwicap_initialize_hwicap()
358 struct hwicap_drvdata *drvdata = file->private_data; in hwicap_read() local
365 status = mutex_lock_interruptible(&drvdata->sem); in hwicap_read()
369 if (drvdata->read_buffer_in_use) { in hwicap_read()
374 (count < drvdata->read_buffer_in_use) ? count : in hwicap_read()
375 drvdata->read_buffer_in_use; in hwicap_read()
378 if (copy_to_user(buf, drvdata->read_buffer, bytes_to_read)) { in hwicap_read()
382 drvdata->read_buffer_in_use -= bytes_to_read; in hwicap_read()
383 memmove(drvdata->read_buffer, in hwicap_read()
384 drvdata->read_buffer + bytes_to_read, in hwicap_read()
413 status = drvdata->config->get_configuration(drvdata, in hwicap_read()
428 memcpy(drvdata->read_buffer, in hwicap_read()
431 drvdata->read_buffer_in_use = bytes_remaining; in hwicap_read()
436 mutex_unlock(&drvdata->sem); in hwicap_read()
444 struct hwicap_drvdata *drvdata = file->private_data; in hwicap_write() local
451 status = mutex_lock_interruptible(&drvdata->sem); in hwicap_write()
455 left += drvdata->write_buffer_in_use; in hwicap_write()
478 if (drvdata->write_buffer_in_use) { in hwicap_write()
479 memcpy(kbuf, drvdata->write_buffer, in hwicap_write()
480 drvdata->write_buffer_in_use); in hwicap_write()
482 (((char *)kbuf) + drvdata->write_buffer_in_use), in hwicap_write()
484 len - (drvdata->write_buffer_in_use))) { in hwicap_write()
497 status = drvdata->config->set_configuration(drvdata, in hwicap_write()
505 if (drvdata->write_buffer_in_use) { in hwicap_write()
506 len -= drvdata->write_buffer_in_use; in hwicap_write()
507 left -= drvdata->write_buffer_in_use; in hwicap_write()
508 drvdata->write_buffer_in_use = 0; in hwicap_write()
514 if (!copy_from_user(drvdata->write_buffer, in hwicap_write()
516 drvdata->write_buffer_in_use = left; in hwicap_write()
525 mutex_unlock(&drvdata->sem); in hwicap_write()
531 struct hwicap_drvdata *drvdata; in hwicap_open() local
535 drvdata = container_of(inode->i_cdev, struct hwicap_drvdata, cdev); in hwicap_open()
537 status = mutex_lock_interruptible(&drvdata->sem); in hwicap_open()
541 if (drvdata->is_open) { in hwicap_open()
546 status = hwicap_initialize_hwicap(drvdata); in hwicap_open()
548 dev_err(drvdata->dev, "Failed to open file"); in hwicap_open()
552 file->private_data = drvdata; in hwicap_open()
553 drvdata->write_buffer_in_use = 0; in hwicap_open()
554 drvdata->read_buffer_in_use = 0; in hwicap_open()
555 drvdata->is_open = 1; in hwicap_open()
558 mutex_unlock(&drvdata->sem); in hwicap_open()
566 struct hwicap_drvdata *drvdata = file->private_data; in hwicap_release() local
570 mutex_lock(&drvdata->sem); in hwicap_release()
572 if (drvdata->write_buffer_in_use) { in hwicap_release()
574 for (i = drvdata->write_buffer_in_use; i < 4; i++) in hwicap_release()
575 drvdata->write_buffer[i] = 0; in hwicap_release()
577 status = drvdata->config->set_configuration(drvdata, in hwicap_release()
578 (u32 *) drvdata->write_buffer, 1); in hwicap_release()
583 status = hwicap_command_desync(drvdata); in hwicap_release()
588 drvdata->is_open = 0; in hwicap_release()
589 mutex_unlock(&drvdata->sem); in hwicap_release()
608 struct hwicap_drvdata *drvdata = NULL; in hwicap_setup() local
637 drvdata = kzalloc(sizeof(struct hwicap_drvdata), GFP_KERNEL); in hwicap_setup()
638 if (!drvdata) { in hwicap_setup()
642 dev_set_drvdata(dev, (void *)drvdata); in hwicap_setup()
650 drvdata->mem_start = regs_res->start; in hwicap_setup()
651 drvdata->mem_end = regs_res->end; in hwicap_setup()
652 drvdata->mem_size = resource_size(regs_res); in hwicap_setup()
654 if (!request_mem_region(drvdata->mem_start, in hwicap_setup()
655 drvdata->mem_size, DRIVER_NAME)) { in hwicap_setup()
662 drvdata->devt = devt; in hwicap_setup()
663 drvdata->dev = dev; in hwicap_setup()
664 drvdata->base_address = ioremap(drvdata->mem_start, drvdata->mem_size); in hwicap_setup()
665 if (!drvdata->base_address) { in hwicap_setup()
671 drvdata->config = config; in hwicap_setup()
672 drvdata->config_regs = config_regs; in hwicap_setup()
674 mutex_init(&drvdata->sem); in hwicap_setup()
675 drvdata->is_open = 0; in hwicap_setup()
678 (unsigned long long) drvdata->mem_start, in hwicap_setup()
679 drvdata->base_address, in hwicap_setup()
680 (unsigned long long) drvdata->mem_size); in hwicap_setup()
682 cdev_init(&drvdata->cdev, &hwicap_fops); in hwicap_setup()
683 drvdata->cdev.owner = THIS_MODULE; in hwicap_setup()
684 retval = cdev_add(&drvdata->cdev, devt, 1); in hwicap_setup()
694 iounmap(drvdata->base_address); in hwicap_setup()
697 release_mem_region(regs_res->start, drvdata->mem_size); in hwicap_setup()
700 kfree(drvdata); in hwicap_setup()
726 struct hwicap_drvdata *drvdata; in hwicap_remove() local
728 drvdata = dev_get_drvdata(dev); in hwicap_remove()
730 if (!drvdata) in hwicap_remove()
733 device_destroy(icap_class, drvdata->devt); in hwicap_remove()
734 cdev_del(&drvdata->cdev); in hwicap_remove()
735 iounmap(drvdata->base_address); in hwicap_remove()
736 release_mem_region(drvdata->mem_start, drvdata->mem_size); in hwicap_remove()
737 kfree(drvdata); in hwicap_remove()