Lines Matching refs:sdevice

68 static bool siox_device_counter_error(struct siox_device *sdevice,  in siox_device_counter_error()  argument
74 static bool siox_device_type_error(struct siox_device *sdevice, u8 status_clean) in siox_device_type_error() argument
83 if (sdevice->statustype) { in siox_device_type_error()
84 if (statustype != sdevice->statustype) in siox_device_type_error()
97 static bool siox_device_wdg_error(struct siox_device *sdevice, u8 status_clean) in siox_device_wdg_error() argument
105 bool siox_device_synced(struct siox_device *sdevice) in siox_device_synced() argument
107 if (siox_device_type_error(sdevice, sdevice->status_read_clean)) in siox_device_synced()
110 return !siox_device_counter_error(sdevice, sdevice->status_read_clean); in siox_device_synced()
119 bool siox_device_connected(struct siox_device *sdevice) in siox_device_connected() argument
121 if (!siox_device_synced(sdevice)) in siox_device_connected()
124 return !siox_device_wdg_error(sdevice, sdevice->status_read_clean); in siox_device_connected()
130 struct siox_device *sdevice; in siox_poll() local
153 list_for_each_entry(sdevice, &smaster->devices, node) { in siox_poll()
155 to_siox_driver(sdevice->dev.driver); in siox_poll()
156 sdevice->status_written = smaster->status; in siox_poll()
158 i -= sdevice->inbytes; in siox_poll()
165 if (!siox_device_synced(sdevice)) in siox_poll()
169 sdriver->set_data(sdevice, sdevice->status_written, in siox_poll()
176 sdevice->status_written &= ~SIOX_STATUS_WDG; in siox_poll()
178 smaster->buf[i] = sdevice->status_written; in siox_poll()
180 trace_siox_set_data(smaster, sdevice, devno, i); in siox_poll()
194 list_for_each_entry(sdevice, &smaster->devices, node) { in siox_poll()
196 to_siox_driver(sdevice->dev.driver); in siox_poll()
197 u8 status = smaster->buf[i + sdevice->outbytes - 1]; in siox_poll()
199 u8 prev_status_clean = sdevice->status_read_clean; in siox_poll()
203 if (!siox_device_synced(sdevice)) in siox_poll()
216 sdevice->status_written_lastcycle); in siox_poll()
219 if (siox_device_counter_error(sdevice, status_clean) || in siox_poll()
220 siox_device_type_error(sdevice, status_clean)) { in siox_poll()
227 siox_device_counter_error(sdevice, in siox_poll()
229 siox_device_type_error(sdevice, in siox_poll()
233 sdevice->status_errors++; in siox_poll()
234 sysfs_notify_dirent(sdevice->status_errors_kn); in siox_poll()
244 if (siox_device_wdg_error(sdevice, status_clean)) in siox_poll()
249 sysfs_notify_dirent(sdevice->watchdog_kn); in siox_poll()
251 if (siox_device_wdg_error(sdevice, status_clean)) { in siox_poll()
253 sdevice->watchdog_errors_kn; in siox_poll()
255 sdevice->watchdog_errors++; in siox_poll()
260 if (connected != sdevice->connected) in siox_poll()
261 sysfs_notify_dirent(sdevice->connected_kn); in siox_poll()
263 sdevice->status_read_clean = status_clean; in siox_poll()
264 sdevice->status_written_lastcycle = sdevice->status_written; in siox_poll()
265 sdevice->connected = connected; in siox_poll()
267 trace_siox_get_data(smaster, sdevice, devno, status_clean, i); in siox_poll()
271 sdriver->get_data(sdevice, &smaster->buf[i]); in siox_poll()
274 i += sdevice->outbytes; in siox_poll()
358 struct siox_device *sdevice; in __siox_stop() local
362 list_for_each_entry(sdevice, &smaster->devices, node) { in __siox_stop()
363 if (sdevice->connected) in __siox_stop()
364 sysfs_notify_dirent(sdevice->connected_kn); in __siox_stop()
365 sdevice->connected = false; in __siox_stop()
496 struct siox_device *sdevice = to_siox_device(dev); in siox_device_release() local
498 kfree(sdevice); in siox_device_release()
518 struct siox_device *sdevice = to_siox_device(dev); in siox_probe() local
520 return sdriver->probe(sdevice); in siox_probe()
527 struct siox_device *sdevice = to_siox_device(dev); in siox_remove() local
530 sdriver->remove(sdevice); in siox_remove()
535 struct siox_device *sdevice = to_siox_device(dev); in siox_shutdown() local
543 sdriver->shutdown(sdevice); in siox_shutdown()
751 struct siox_device *sdevice; in siox_master_unregister() local
753 sdevice = container_of(smaster->devices.prev, in siox_master_unregister()
755 list_del(&sdevice->node); in siox_master_unregister()
760 device_unregister(&sdevice->dev); in siox_master_unregister()
775 struct siox_device *sdevice; in siox_device_add() local
779 sdevice = kzalloc(sizeof(*sdevice), GFP_KERNEL); in siox_device_add()
780 if (!sdevice) in siox_device_add()
783 sdevice->type = type; in siox_device_add()
784 sdevice->inbytes = inbytes; in siox_device_add()
785 sdevice->outbytes = outbytes; in siox_device_add()
786 sdevice->statustype = statustype; in siox_device_add()
788 sdevice->smaster = smaster; in siox_device_add()
789 sdevice->dev.parent = &smaster->dev; in siox_device_add()
790 sdevice->dev.bus = &siox_bus_type; in siox_device_add()
791 sdevice->dev.type = &siox_device_type; in siox_device_add()
795 dev_set_name(&sdevice->dev, "siox-%d-%d", in siox_device_add()
814 ret = device_register(&sdevice->dev); in siox_device_add()
822 list_add_tail(&sdevice->node, &smaster->devices); in siox_device_add()
824 smaster->setbuf_len += sdevice->inbytes; in siox_device_add()
825 smaster->getbuf_len += sdevice->outbytes; in siox_device_add()
827 sdevice->status_errors_kn = sysfs_get_dirent(sdevice->dev.kobj.sd, in siox_device_add()
829 sdevice->watchdog_kn = sysfs_get_dirent(sdevice->dev.kobj.sd, in siox_device_add()
831 sdevice->watchdog_errors_kn = sysfs_get_dirent(sdevice->dev.kobj.sd, in siox_device_add()
833 sdevice->connected_kn = sysfs_get_dirent(sdevice->dev.kobj.sd, in siox_device_add()
838 return sdevice; in siox_device_add()
846 kfree(sdevice); in siox_device_add()
853 struct siox_device *sdevice; in siox_device_remove() local
862 sdevice = container_of(smaster->devices.prev, struct siox_device, node); in siox_device_remove()
863 list_del(&sdevice->node); in siox_device_remove()
866 smaster->setbuf_len -= sdevice->inbytes; in siox_device_remove()
867 smaster->getbuf_len -= sdevice->outbytes; in siox_device_remove()
879 device_unregister(&sdevice->dev); in siox_device_remove()