Lines Matching defs:sdevice

68 static bool siox_device_counter_error(struct siox_device *sdevice,
74 static bool siox_device_type_error(struct siox_device *sdevice, u8 status_clean)
83 if (sdevice->statustype) {
84 if (statustype != sdevice->statustype)
97 static bool siox_device_wdg_error(struct siox_device *sdevice, u8 status_clean)
105 bool siox_device_synced(struct siox_device *sdevice)
107 if (siox_device_type_error(sdevice, sdevice->status_read_clean))
110 return !siox_device_counter_error(sdevice, sdevice->status_read_clean);
119 bool siox_device_connected(struct siox_device *sdevice)
121 if (!siox_device_synced(sdevice))
124 return !siox_device_wdg_error(sdevice, sdevice->status_read_clean);
130 struct siox_device *sdevice;
153 list_for_each_entry(sdevice, &smaster->devices, node) {
155 to_siox_driver(sdevice->dev.driver);
156 sdevice->status_written = smaster->status;
158 i -= sdevice->inbytes;
165 if (!siox_device_synced(sdevice))
169 sdriver->set_data(sdevice, sdevice->status_written,
176 sdevice->status_written &= ~SIOX_STATUS_WDG;
178 smaster->buf[i] = sdevice->status_written;
180 trace_siox_set_data(smaster, sdevice, devno, i);
194 list_for_each_entry(sdevice, &smaster->devices, node) {
196 to_siox_driver(sdevice->dev.driver);
197 u8 status = smaster->buf[i + sdevice->outbytes - 1];
199 u8 prev_status_clean = sdevice->status_read_clean;
203 if (!siox_device_synced(sdevice))
216 sdevice->status_written_lastcycle);
219 if (siox_device_counter_error(sdevice, status_clean) ||
220 siox_device_type_error(sdevice, status_clean)) {
227 siox_device_counter_error(sdevice,
229 siox_device_type_error(sdevice,
233 sdevice->status_errors++;
234 sysfs_notify_dirent(sdevice->status_errors_kn);
244 if (siox_device_wdg_error(sdevice, status_clean))
249 sysfs_notify_dirent(sdevice->watchdog_kn);
251 if (siox_device_wdg_error(sdevice, status_clean)) {
253 sdevice->watchdog_errors_kn;
255 sdevice->watchdog_errors++;
260 if (connected != sdevice->connected)
261 sysfs_notify_dirent(sdevice->connected_kn);
263 sdevice->status_read_clean = status_clean;
264 sdevice->status_written_lastcycle = sdevice->status_written;
265 sdevice->connected = connected;
267 trace_siox_get_data(smaster, sdevice, devno, status_clean, i);
271 sdriver->get_data(sdevice, &smaster->buf[i]);
274 i += sdevice->outbytes;
358 struct siox_device *sdevice;
362 list_for_each_entry(sdevice, &smaster->devices, node) {
363 if (sdevice->connected)
364 sysfs_notify_dirent(sdevice->connected_kn);
365 sdevice->connected = false;
496 struct siox_device *sdevice = to_siox_device(dev);
498 kfree(sdevice);
523 struct siox_device *sdevice = to_siox_device(dev);
526 ret = sdriver->probe(sdevice);
534 struct siox_device *sdevice = to_siox_device(dev);
537 ret = sdriver->remove(sdevice);
545 struct siox_device *sdevice = to_siox_device(dev);
547 sdriver->shutdown(sdevice);
747 struct siox_device *sdevice;
749 sdevice = container_of(smaster->devices.prev,
751 list_del(&sdevice->node);
756 device_unregister(&sdevice->dev);
771 struct siox_device *sdevice;
775 sdevice = kzalloc(sizeof(*sdevice), GFP_KERNEL);
776 if (!sdevice)
779 sdevice->type = type;
780 sdevice->inbytes = inbytes;
781 sdevice->outbytes = outbytes;
782 sdevice->statustype = statustype;
784 sdevice->smaster = smaster;
785 sdevice->dev.parent = &smaster->dev;
786 sdevice->dev.bus = &siox_bus_type;
787 sdevice->dev.type = &siox_device_type;
791 dev_set_name(&sdevice->dev, "siox-%d-%d",
810 ret = device_register(&sdevice->dev);
818 list_add_tail(&sdevice->node, &smaster->devices);
820 smaster->setbuf_len += sdevice->inbytes;
821 smaster->getbuf_len += sdevice->outbytes;
823 sdevice->status_errors_kn = sysfs_get_dirent(sdevice->dev.kobj.sd,
825 sdevice->watchdog_kn = sysfs_get_dirent(sdevice->dev.kobj.sd,
827 sdevice->watchdog_errors_kn = sysfs_get_dirent(sdevice->dev.kobj.sd,
829 sdevice->connected_kn = sysfs_get_dirent(sdevice->dev.kobj.sd,
834 return sdevice;
838 put_device(&sdevice->dev);
839 sdevice = NULL;
844 kfree(sdevice);
851 struct siox_device *sdevice;
860 sdevice = container_of(smaster->devices.prev, struct siox_device, node);
861 list_del(&sdevice->node);
864 smaster->setbuf_len -= sdevice->inbytes;
865 smaster->getbuf_len -= sdevice->outbytes;
877 device_unregister(&sdevice->dev);