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);
518 struct siox_device *sdevice = to_siox_device(dev);
520 return sdriver->probe(sdevice);
527 struct siox_device *sdevice = to_siox_device(dev);
530 sdriver->remove(sdevice);
535 struct siox_device *sdevice = to_siox_device(dev);
543 sdriver->shutdown(sdevice);
751 struct siox_device *sdevice;
753 sdevice = container_of(smaster->devices.prev,
755 list_del(&sdevice->node);
760 device_unregister(&sdevice->dev);
775 struct siox_device *sdevice;
779 sdevice = kzalloc(sizeof(*sdevice), GFP_KERNEL);
780 if (!sdevice)
783 sdevice->type = type;
784 sdevice->inbytes = inbytes;
785 sdevice->outbytes = outbytes;
786 sdevice->statustype = statustype;
788 sdevice->smaster = smaster;
789 sdevice->dev.parent = &smaster->dev;
790 sdevice->dev.bus = &siox_bus_type;
791 sdevice->dev.type = &siox_device_type;
795 dev_set_name(&sdevice->dev, "siox-%d-%d",
814 ret = device_register(&sdevice->dev);
822 list_add_tail(&sdevice->node, &smaster->devices);
824 smaster->setbuf_len += sdevice->inbytes;
825 smaster->getbuf_len += sdevice->outbytes;
827 sdevice->status_errors_kn = sysfs_get_dirent(sdevice->dev.kobj.sd,
829 sdevice->watchdog_kn = sysfs_get_dirent(sdevice->dev.kobj.sd,
831 sdevice->watchdog_errors_kn = sysfs_get_dirent(sdevice->dev.kobj.sd,
833 sdevice->connected_kn = sysfs_get_dirent(sdevice->dev.kobj.sd,
838 return sdevice;
842 put_device(&sdevice->dev);
843 sdevice = NULL;
848 kfree(sdevice);
855 struct siox_device *sdevice;
864 sdevice = container_of(smaster->devices.prev, struct siox_device, node);
865 list_del(&sdevice->node);
868 smaster->setbuf_len -= sdevice->inbytes;
869 smaster->getbuf_len -= sdevice->outbytes;
881 device_unregister(&sdevice->dev);