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);
778 struct siox_device *sdevice;
780 sdevice = container_of(smaster->devices.prev,
782 list_del(&sdevice->node);
787 device_unregister(&sdevice->dev);
821 struct siox_device *sdevice;
825 sdevice = kzalloc(sizeof(*sdevice), GFP_KERNEL);
826 if (!sdevice)
829 sdevice->type = type;
830 sdevice->inbytes = inbytes;
831 sdevice->outbytes = outbytes;
832 sdevice->statustype = statustype;
834 sdevice->smaster = smaster;
835 sdevice->dev.parent = &smaster->dev;
836 sdevice->dev.bus = &siox_bus_type;
837 sdevice->dev.type = &siox_device_type;
841 dev_set_name(&sdevice->dev, "siox-%d-%d",
860 ret = device_register(&sdevice->dev);
868 list_add_tail(&sdevice->node, &smaster->devices);
870 smaster->setbuf_len += sdevice->inbytes;
871 smaster->getbuf_len += sdevice->outbytes;
873 sdevice->status_errors_kn = sysfs_get_dirent(sdevice->dev.kobj.sd,
875 sdevice->watchdog_kn = sysfs_get_dirent(sdevice->dev.kobj.sd,
877 sdevice->watchdog_errors_kn = sysfs_get_dirent(sdevice->dev.kobj.sd,
879 sdevice->connected_kn = sysfs_get_dirent(sdevice->dev.kobj.sd,
884 return sdevice;
888 put_device(&sdevice->dev);
889 sdevice = NULL;
894 kfree(sdevice);
901 struct siox_device *sdevice;
910 sdevice = container_of(smaster->devices.prev, struct siox_device, node);
911 list_del(&sdevice->node);
914 smaster->setbuf_len -= sdevice->inbytes;
915 smaster->getbuf_len -= sdevice->outbytes;
927 device_unregister(&sdevice->dev);