Lines Matching defs:ssif_info

110  * Indexes into stats[] in ssif_info below.
196 struct ssif_info;
198 typedef void (*ssif_i2c_done)(struct ssif_info *ssif_info, int result,
201 struct ssif_info {
300 static void return_hosed_msg(struct ssif_info *ssif_info,
302 static void start_next_msg(struct ssif_info *ssif_info, unsigned long *flags);
303 static int start_send(struct ssif_info *ssif_info,
307 static unsigned long *ipmi_ssif_lock_cond(struct ssif_info *ssif_info,
309 __acquires(&ssif_info->lock)
311 spin_lock_irqsave(&ssif_info->lock, *flags);
315 static void ipmi_ssif_unlock_cond(struct ssif_info *ssif_info,
317 __releases(&ssif_info->lock)
319 spin_unlock_irqrestore(&ssif_info->lock, *flags);
322 static void deliver_recv_msg(struct ssif_info *ssif_info,
326 return_hosed_msg(ssif_info, msg);
327 dev_err(&ssif_info->client->dev,
331 ipmi_smi_msg_received(ssif_info->intf, msg);
335 static void return_hosed_msg(struct ssif_info *ssif_info,
338 ssif_inc_stat(ssif_info, hosed);
346 deliver_recv_msg(ssif_info, msg);
355 static void start_clear_flags(struct ssif_info *ssif_info, unsigned long *flags)
359 ssif_info->msg_flags &= ~WDT_PRE_TIMEOUT_INT;
360 ssif_info->ssif_state = SSIF_CLEARING_FLAGS;
361 ipmi_ssif_unlock_cond(ssif_info, flags);
368 if (start_send(ssif_info, msg, 3) != 0) {
370 ssif_info->ssif_state = SSIF_IDLE;
374 static void start_flag_fetch(struct ssif_info *ssif_info, unsigned long *flags)
378 ssif_info->req_flags = false;
379 ssif_info->ssif_state = SSIF_GETTING_FLAGS;
380 ipmi_ssif_unlock_cond(ssif_info, flags);
384 if (start_send(ssif_info, mb, 2) != 0)
385 ssif_info->ssif_state = SSIF_IDLE;
388 static void check_start_send(struct ssif_info *ssif_info, unsigned long *flags,
391 if (start_send(ssif_info, msg->data, msg->data_size) != 0) {
394 flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
395 ssif_info->curr_msg = NULL;
396 ssif_info->ssif_state = SSIF_IDLE;
397 ipmi_ssif_unlock_cond(ssif_info, flags);
402 static void start_event_fetch(struct ssif_info *ssif_info, unsigned long *flags)
406 ssif_info->req_events = false;
410 ssif_info->ssif_state = SSIF_IDLE;
411 ipmi_ssif_unlock_cond(ssif_info, flags);
415 ssif_info->curr_msg = msg;
416 ssif_info->ssif_state = SSIF_GETTING_EVENTS;
417 ipmi_ssif_unlock_cond(ssif_info, flags);
423 check_start_send(ssif_info, flags, msg);
426 static void start_recv_msg_fetch(struct ssif_info *ssif_info,
433 ssif_info->ssif_state = SSIF_IDLE;
434 ipmi_ssif_unlock_cond(ssif_info, flags);
438 ssif_info->curr_msg = msg;
439 ssif_info->ssif_state = SSIF_GETTING_MESSAGES;
440 ipmi_ssif_unlock_cond(ssif_info, flags);
446 check_start_send(ssif_info, flags, msg);
455 static void handle_flags(struct ssif_info *ssif_info, unsigned long *flags)
457 if (ssif_info->msg_flags & WDT_PRE_TIMEOUT_INT) {
459 ssif_inc_stat(ssif_info, watchdog_pretimeouts);
460 start_clear_flags(ssif_info, flags);
461 ipmi_smi_watchdog_pretimeout(ssif_info->intf);
462 } else if (ssif_info->msg_flags & RECEIVE_MSG_AVAIL)
464 start_recv_msg_fetch(ssif_info, flags);
465 else if (ssif_info->msg_flags & EVENT_MSG_BUFFER_FULL)
467 start_event_fetch(ssif_info, flags);
469 ssif_info->ssif_state = SSIF_IDLE;
470 ipmi_ssif_unlock_cond(ssif_info, flags);
476 struct ssif_info *ssif_info = data;
483 &ssif_info->wake_thread);
484 if (ssif_info->stopping)
488 init_completion(&ssif_info->wake_thread);
490 if (ssif_info->i2c_read_write == I2C_SMBUS_WRITE) {
492 ssif_info->client, ssif_info->i2c_command,
493 ssif_info->i2c_data[0],
494 ssif_info->i2c_data + 1);
495 ssif_info->done_handler(ssif_info, result, NULL, 0);
498 ssif_info->client, ssif_info->i2c_command,
499 ssif_info->i2c_data);
501 ssif_info->done_handler(ssif_info, result,
504 ssif_info->done_handler(ssif_info, 0,
505 ssif_info->i2c_data,
513 static void ssif_i2c_send(struct ssif_info *ssif_info,
518 ssif_info->done_handler = handler;
520 ssif_info->i2c_read_write = read_write;
521 ssif_info->i2c_command = command;
522 ssif_info->i2c_data = data;
523 ssif_info->i2c_size = size;
524 complete(&ssif_info->wake_thread);
528 static void msg_done_handler(struct ssif_info *ssif_info, int result,
531 static void start_get(struct ssif_info *ssif_info)
533 ssif_info->multi_pos = 0;
535 ssif_i2c_send(ssif_info, msg_done_handler, I2C_SMBUS_READ,
537 ssif_info->recv, I2C_SMBUS_BLOCK_DATA);
540 static void start_resend(struct ssif_info *ssif_info);
544 struct ssif_info *ssif_info = from_timer(ssif_info, t, retry_timer);
548 if (ssif_info->stopping)
551 flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
552 resend = ssif_info->do_resend;
553 ssif_info->do_resend = false;
554 waiting = ssif_info->waiting_alert;
555 ssif_info->waiting_alert = false;
556 ipmi_ssif_unlock_cond(ssif_info, flags);
559 start_get(ssif_info);
561 start_resend(ssif_info);
562 ssif_inc_stat(ssif_info, send_retries);
568 struct ssif_info *ssif_info = from_timer(ssif_info, t, watch_timer);
571 if (ssif_info->stopping)
574 flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
575 if (ssif_info->watch_timeout) {
576 mod_timer(&ssif_info->watch_timer,
577 jiffies + ssif_info->watch_timeout);
578 if (IS_SSIF_IDLE(ssif_info)) {
579 start_flag_fetch(ssif_info, flags); /* Releases lock */
582 ssif_info->req_flags = true;
584 ipmi_ssif_unlock_cond(ssif_info, flags);
590 struct ssif_info *ssif_info = i2c_get_clientdata(client);
597 ssif_inc_stat(ssif_info, alerts);
599 flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
600 if (ssif_info->waiting_alert) {
601 ssif_info->waiting_alert = false;
602 del_timer(&ssif_info->retry_timer);
604 } else if (ssif_info->curr_msg) {
605 ssif_info->got_alert = true;
607 ipmi_ssif_unlock_cond(ssif_info, flags);
609 start_get(ssif_info);
612 static void msg_done_handler(struct ssif_info *ssif_info, int result,
624 ssif_info->retries_left--;
625 if (ssif_info->retries_left > 0) {
626 ssif_inc_stat(ssif_info, receive_retries);
628 flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
629 ssif_info->waiting_alert = true;
630 if (!ssif_info->stopping)
631 mod_timer(&ssif_info->retry_timer,
633 ipmi_ssif_unlock_cond(ssif_info, flags);
637 ssif_inc_stat(ssif_info, receive_errors);
639 if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
640 dev_dbg(&ssif_info->client->dev,
646 if ((len > 1) && (ssif_info->multi_pos == 0)
651 ssif_inc_stat(ssif_info, received_message_parts);
657 ssif_info->data[i] = data[i];
658 ssif_info->multi_len = len;
659 ssif_info->multi_pos = 1;
661 ssif_i2c_send(ssif_info, msg_done_handler, I2C_SMBUS_READ,
663 ssif_info->recv, I2C_SMBUS_BLOCK_DATA);
665 } else if (ssif_info->multi_pos) {
672 if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
673 dev_dbg(&ssif_info->client->dev,
686 if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
687 dev_dbg(&ssif_info->client->dev,
693 if (ssif_info->multi_len + len > IPMI_MAX_MSG_LENGTH) {
696 if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
697 dev_dbg(&ssif_info->client->dev,
704 ssif_info->data[i + ssif_info->multi_len] = data[i];
705 ssif_info->multi_len += len;
708 len = ssif_info->multi_len;
709 data = ssif_info->data;
710 } else if (blocknum + 1 != ssif_info->multi_pos) {
716 if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
717 dev_dbg(&ssif_info->client->dev,
719 ssif_info->multi_pos - 1, blocknum);
722 ssif_inc_stat(ssif_info, received_message_parts);
724 ssif_info->multi_pos++;
726 ssif_i2c_send(ssif_info, msg_done_handler,
729 ssif_info->recv,
737 ssif_inc_stat(ssif_info, receive_errors);
739 ssif_inc_stat(ssif_info, received_messages);
740 ssif_inc_stat(ssif_info, received_message_parts);
743 if (ssif_info->ssif_debug & SSIF_DEBUG_STATE)
744 dev_dbg(&ssif_info->client->dev,
746 ssif_info->ssif_state, result);
748 flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
749 msg = ssif_info->curr_msg;
759 ssif_info->curr_msg = NULL;
762 switch (ssif_info->ssif_state) {
764 ipmi_ssif_unlock_cond(ssif_info, flags);
769 return_hosed_msg(ssif_info, msg);
771 deliver_recv_msg(ssif_info, msg);
781 ssif_info->ssif_state = SSIF_IDLE;
782 ipmi_ssif_unlock_cond(ssif_info, flags);
783 dev_warn(&ssif_info->client->dev,
791 ssif_info->ssif_state = SSIF_IDLE;
792 ipmi_ssif_unlock_cond(ssif_info, flags);
793 dev_warn(&ssif_info->client->dev,
797 ssif_inc_stat(ssif_info, flag_fetches);
798 ssif_info->msg_flags = data[3];
799 handle_flags(ssif_info, flags);
807 dev_warn(&ssif_info->client->dev,
812 dev_warn(&ssif_info->client->dev,
816 ssif_info->ssif_state = SSIF_IDLE;
817 ipmi_ssif_unlock_cond(ssif_info, flags);
823 dev_warn(&ssif_info->client->dev,
825 ipmi_ssif_unlock_cond(ssif_info, flags);
834 ssif_info->msg_flags &= ~EVENT_MSG_BUFFER_FULL;
835 handle_flags(ssif_info, flags);
838 dev_warn(&ssif_info->client->dev,
843 ssif_info->msg_flags &= ~EVENT_MSG_BUFFER_FULL;
844 handle_flags(ssif_info, flags);
846 handle_flags(ssif_info, flags);
847 ssif_inc_stat(ssif_info, events);
848 deliver_recv_msg(ssif_info, msg);
855 dev_warn(&ssif_info->client->dev,
857 ipmi_ssif_unlock_cond(ssif_info, flags);
866 ssif_info->msg_flags &= ~RECEIVE_MSG_AVAIL;
867 handle_flags(ssif_info, flags);
870 dev_warn(&ssif_info->client->dev,
876 ssif_info->msg_flags &= ~RECEIVE_MSG_AVAIL;
877 handle_flags(ssif_info, flags);
879 ssif_inc_stat(ssif_info, incoming_messages);
880 handle_flags(ssif_info, flags);
881 deliver_recv_msg(ssif_info, msg);
887 dev_warn(&ssif_info->client->dev,
889 ssif_info->ssif_state);
890 ipmi_ssif_unlock_cond(ssif_info, flags);
893 flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
894 if (IS_SSIF_IDLE(ssif_info) && !ssif_info->stopping) {
895 if (ssif_info->req_events)
896 start_event_fetch(ssif_info, flags);
897 else if (ssif_info->req_flags)
898 start_flag_fetch(ssif_info, flags);
900 start_next_msg(ssif_info, flags);
902 ipmi_ssif_unlock_cond(ssif_info, flags);
904 if (ssif_info->ssif_debug & SSIF_DEBUG_STATE)
905 dev_dbg(&ssif_info->client->dev,
906 "DONE 2: state = %d.\n", ssif_info->ssif_state);
909 static void msg_written_handler(struct ssif_info *ssif_info, int result,
914 ssif_info->retries_left--;
915 if (ssif_info->retries_left > 0) {
920 ssif_info->do_resend = true;
921 mod_timer(&ssif_info->retry_timer,
926 ssif_inc_stat(ssif_info, send_errors);
928 if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
929 dev_dbg(&ssif_info->client->dev,
932 msg_done_handler(ssif_info, -EIO, NULL, 0);
936 if (ssif_info->multi_data) {
946 ssif_inc_stat(ssif_info, sent_messages_parts);
948 left = ssif_info->multi_len - ssif_info->multi_pos;
953 ssif_info->multi_data[ssif_info->multi_pos] = to_write;
954 data_to_send = ssif_info->multi_data + ssif_info->multi_pos;
955 ssif_info->multi_pos += to_write;
957 if (ssif_info->cmd8_works) {
960 ssif_info->multi_data = NULL;
963 ssif_info->multi_data = NULL;
966 ssif_i2c_send(ssif_info, msg_written_handler,
973 ssif_inc_stat(ssif_info, sent_messages);
974 ssif_inc_stat(ssif_info, sent_messages_parts);
976 flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
977 if (ssif_info->got_alert) {
979 ssif_info->got_alert = false;
980 ipmi_ssif_unlock_cond(ssif_info, flags);
981 start_get(ssif_info);
984 ssif_info->waiting_alert = true;
985 ssif_info->retries_left = SSIF_RECV_RETRIES;
986 if (!ssif_info->stopping)
987 mod_timer(&ssif_info->retry_timer,
989 ipmi_ssif_unlock_cond(ssif_info, flags);
994 static void start_resend(struct ssif_info *ssif_info)
998 ssif_info->got_alert = false;
1000 if (ssif_info->data_len > 32) {
1002 ssif_info->multi_data = ssif_info->data;
1003 ssif_info->multi_len = ssif_info->data_len;
1009 ssif_info->multi_pos = 32;
1010 ssif_info->data[0] = 32;
1012 ssif_info->multi_data = NULL;
1014 ssif_info->data[0] = ssif_info->data_len;
1017 ssif_i2c_send(ssif_info, msg_written_handler, I2C_SMBUS_WRITE,
1018 command, ssif_info->data, I2C_SMBUS_BLOCK_DATA);
1021 static int start_send(struct ssif_info *ssif_info,
1027 if (len > ssif_info->max_xmit_msg_size)
1030 ssif_info->retries_left = SSIF_SEND_RETRIES;
1031 memcpy(ssif_info->data + 1, data, len);
1032 ssif_info->data_len = len;
1033 start_resend(ssif_info);
1038 static void start_next_msg(struct ssif_info *ssif_info, unsigned long *flags)
1044 if (!IS_SSIF_IDLE(ssif_info)) {
1045 ipmi_ssif_unlock_cond(ssif_info, flags);
1049 if (!ssif_info->waiting_msg) {
1050 ssif_info->curr_msg = NULL;
1051 ipmi_ssif_unlock_cond(ssif_info, flags);
1055 ssif_info->curr_msg = ssif_info->waiting_msg;
1056 ssif_info->waiting_msg = NULL;
1057 ipmi_ssif_unlock_cond(ssif_info, flags);
1058 rv = start_send(ssif_info,
1059 ssif_info->curr_msg->data,
1060 ssif_info->curr_msg->data_size);
1062 msg = ssif_info->curr_msg;
1063 ssif_info->curr_msg = NULL;
1064 return_hosed_msg(ssif_info, msg);
1065 flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
1074 struct ssif_info *ssif_info = send_info;
1077 BUG_ON(ssif_info->waiting_msg);
1078 ssif_info->waiting_msg = msg;
1080 flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
1081 start_next_msg(ssif_info, flags);
1083 if (ssif_info->ssif_debug & SSIF_DEBUG_TIMING) {
1087 dev_dbg(&ssif_info->client->dev,
1096 struct ssif_info *ssif_info = send_info;
1098 data->addr_src = ssif_info->addr_source;
1099 data->dev = &ssif_info->client->dev;
1100 data->addr_info = ssif_info->addr_info;
1111 struct ssif_info *ssif_info = send_info;
1114 if (!ssif_info->has_event_buffer)
1117 flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
1118 ssif_info->req_events = true;
1119 ipmi_ssif_unlock_cond(ssif_info, flags);
1128 struct ssif_info *ssif_info = send_info;
1137 flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
1138 if (timeout != ssif_info->watch_timeout) {
1139 ssif_info->watch_timeout = timeout;
1140 if (ssif_info->watch_timeout)
1141 mod_timer(&ssif_info->watch_timer,
1142 jiffies + ssif_info->watch_timeout);
1144 ipmi_ssif_unlock_cond(ssif_info, flags);
1150 struct ssif_info *ssif_info = send_info;
1152 ssif_info->intf = intf;
1209 struct ssif_info *ssif_info = dev_get_drvdata(dev); \
1211 return sysfs_emit(buf, "%u\n", ssif_get_stat(ssif_info, name));\
1261 struct ssif_info *ssif_info = send_info;
1263 device_remove_group(&ssif_info->client->dev, &ipmi_ssif_dev_attr_group);
1264 dev_set_drvdata(&ssif_info->client->dev, NULL);
1267 while (ssif_info->ssif_state != SSIF_IDLE)
1270 ssif_info->stopping = true;
1271 del_timer_sync(&ssif_info->watch_timer);
1272 del_timer_sync(&ssif_info->retry_timer);
1273 if (ssif_info->thread) {
1274 complete(&ssif_info->wake_thread);
1275 kthread_stop(ssif_info->thread);
1281 struct ssif_info *ssif_info = i2c_get_clientdata(client);
1288 ipmi_unregister_smi(ssif_info->intf);
1297 kfree(ssif_info);
1433 static bool check_acpi(struct ssif_info *ssif_info, struct device *dev)
1440 ssif_info->addr_source = SI_ACPI;
1441 ssif_info->addr_info.acpi_info.acpi_handle = acpi_handle;
1496 struct ssif_info *ssif_info,
1503 if (ssif_info->max_xmit_msg_size <= 32)
1506 do_middle = ssif_info->max_xmit_msg_size > 63;
1550 ssif_info->cmd8_works = true;
1570 if (ssif_info->max_xmit_msg_size > 63)
1571 ssif_info->max_xmit_msg_size = 63;
1575 ssif_info->max_xmit_msg_size = 32;
1587 struct ssif_info *ssif_info = i2c_get_clientdata(client);
1589 ipmi_unregister_smi(ssif_info->intf);
1590 kfree(ssif_info);
1619 struct ssif_info *ssif_info)
1631 if (ssif_info->addr_source == SI_ACPI &&
1648 struct ssif_info *ssif_info;
1662 ssif_info = kzalloc(sizeof(*ssif_info), GFP_KERNEL);
1663 if (!ssif_info) {
1669 if (!check_acpi(ssif_info, &client->dev)) {
1674 ssif_info->addr_source = SI_HOTMOD;
1676 ssif_info->addr_source = addr_info->addr_src;
1677 ssif_info->ssif_debug = addr_info->debug;
1678 ssif_info->addr_info = addr_info->addr_info;
1684 ssif_info->client = client;
1685 i2c_set_clientdata(client, ssif_info);
1687 rv = ssif_check_and_remove(client, ssif_info);
1689 if (!rv && ssif_info->addr_source == SI_ACPI) {
1704 ipmi_addr_src_to_str(ssif_info->addr_source),
1715 dev_dbg(&ssif_info->client->dev,
1721 ssif_info->max_xmit_msg_size = resp[5];
1722 ssif_info->max_recv_msg_size = resp[6];
1723 ssif_info->multi_support = (resp[4] >> 6) & 0x3;
1724 ssif_info->supports_pec = (resp[4] >> 3) & 0x1;
1727 switch (ssif_info->multi_support) {
1729 if (ssif_info->max_xmit_msg_size > 32)
1730 ssif_info->max_xmit_msg_size = 32;
1731 if (ssif_info->max_recv_msg_size > 32)
1732 ssif_info->max_recv_msg_size = 32;
1736 if (ssif_info->max_xmit_msg_size > 63)
1737 ssif_info->max_xmit_msg_size = 63;
1738 if (ssif_info->max_recv_msg_size > 62)
1739 ssif_info->max_recv_msg_size = 62;
1753 dev_info(&ssif_info->client->dev,
1757 ssif_info->max_xmit_msg_size = 32;
1758 ssif_info->max_recv_msg_size = 32;
1759 ssif_info->multi_support = SSIF_NO_MULTI;
1760 ssif_info->supports_pec = 0;
1763 test_multipart_messages(client, ssif_info, resp);
1771 dev_warn(&ssif_info->client->dev,
1780 dev_warn(&ssif_info->client->dev,
1787 ssif_info->global_enables = resp[3];
1790 ssif_info->has_event_buffer = true;
1797 msg[2] = ssif_info->global_enables | IPMI_BMC_EVT_MSG_BUFF;
1800 dev_warn(&ssif_info->client->dev,
1809 ssif_info->has_event_buffer = true;
1810 ssif_info->global_enables |= IPMI_BMC_EVT_MSG_BUFF;
1819 msg[2] = ssif_info->global_enables | IPMI_BMC_RCV_MSG_INTR;
1822 dev_warn(&ssif_info->client->dev,
1831 ssif_info->supports_alert = true;
1832 ssif_info->global_enables |= IPMI_BMC_RCV_MSG_INTR;
1837 dev_dbg(&ssif_info->client->dev,
1842 spin_lock_init(&ssif_info->lock);
1843 ssif_info->ssif_state = SSIF_IDLE;
1844 timer_setup(&ssif_info->retry_timer, retry_timeout, 0);
1845 timer_setup(&ssif_info->watch_timer, watch_timeout, 0);
1848 atomic_set(&ssif_info->stats[i], 0);
1850 if (ssif_info->supports_pec)
1851 ssif_info->client->flags |= I2C_CLIENT_PEC;
1853 ssif_info->handlers.owner = THIS_MODULE;
1854 ssif_info->handlers.start_processing = ssif_start_processing;
1855 ssif_info->handlers.shutdown = shutdown_ssif;
1856 ssif_info->handlers.get_smi_info = get_smi_info;
1857 ssif_info->handlers.sender = sender;
1858 ssif_info->handlers.request_events = request_events;
1859 ssif_info->handlers.set_need_watch = ssif_set_need_watch;
1864 thread_num = ((i2c_adapter_id(ssif_info->client->adapter)
1866 ssif_info->client->addr);
1867 init_completion(&ssif_info->wake_thread);
1868 ssif_info->thread = kthread_run(ipmi_ssif_thread, ssif_info,
1870 if (IS_ERR(ssif_info->thread)) {
1871 rv = PTR_ERR(ssif_info->thread);
1872 dev_notice(&ssif_info->client->dev,
1879 dev_set_drvdata(&ssif_info->client->dev, ssif_info);
1880 rv = device_add_group(&ssif_info->client->dev,
1883 dev_err(&ssif_info->client->dev,
1889 rv = ipmi_register_smi(&ssif_info->handlers,
1890 ssif_info,
1891 &ssif_info->client->dev,
1894 dev_err(&ssif_info->client->dev,
1904 dev_err(&ssif_info->client->dev,
1907 kfree(ssif_info);
1914 device_remove_group(&ssif_info->client->dev, &ipmi_ssif_dev_attr_group);
1915 dev_set_drvdata(&ssif_info->client->dev, NULL);