123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619 |
- #define pr_fmt(fmt) "[MUIC] " fmt
- #include <linux/module.h>
- #include <linux/kernel.h>
- #include <linux/device.h>
- #include <linux/notifier.h>
- #if IS_ENABLED(CONFIG_ANDROID_SWITCH) || IS_ENABLED(CONFIG_SWITCH)
- #include <linux/switch.h>
- #endif /* CONFIG_ANDROID_SWITCH || CONFIG_SWITCH */
- #include <linux/muic/common/muic.h>
- #include <linux/muic/common/muic_notifier.h>
- #if IS_ENABLED(CONFIG_DRV_SAMSUNG)
- #include <linux/sec_class.h>
- #endif
- #define SET_MUIC_NOTIFIER_BLOCK(nb, fn, dev) do { \
- (nb)->notifier_call = (fn); \
- (nb)->priority = (dev); \
- } while (0)
- #define DESTROY_MUIC_NOTIFIER_BLOCK(nb) \
- SET_MUIC_NOTIFIER_BLOCK(nb, NULL, -1)
- struct device *switch_device;
- EXPORT_SYMBOL(switch_device);
- static struct muic_notifier_struct muic_notifier;
- #if IS_ENABLED(CONFIG_PDIC_SLSI_NON_MCU)
- static struct muic_notifier_struct muic_pdic_notifier;
- #endif
- static int muic_uses_new_noti;
- #if IS_ENABLED(CONFIG_PDIC_SLSI_NON_MCU)
- static int muic_pdic_uses_new_noti;
- #endif
- static int muic_notifier_init_done;
- static int muic_notifier_init(void);
- #if IS_ENABLED(CONFIG_SEC_FACTORY)
- #if IS_ENABLED(CONFIG_ANDROID_SWITCH) || IS_ENABLED(CONFIG_SWITCH)
- struct switch_dev switch_muic_dev = {
- .name = "attached_muic_cable",
- };
- static void send_muic_cable_intent(int type)
- {
- pr_info("%s: MUIC attached_muic_cable type(%d)\n", __func__, type);
- switch_set_state(&switch_muic_dev, type);
- }
- #endif /* CONFIG_ANDROID_SWITCH || CONFIG_SWITCH */
- #endif
- void muic_notifier_set_new_noti(bool flag)
- {
- muic_uses_new_noti = flag ? 1 : 0;
- }
- EXPORT_SYMBOL(muic_notifier_set_new_noti);
- static void __set_noti_cxt_dest(int attach, int type, int dest)
- {
- if (type < 0) {
- muic_notifier.cmd = attach;
- #if IS_ENABLED(CONFIG_PDIC_NOTIFIER)
- muic_notifier.cxt.attach = attach;
- muic_notifier.cxt.dest = dest;
- #endif
- return;
- }
- /* Old Interface */
- muic_notifier.cmd = attach;
- muic_notifier.attached_dev = type;
- #if IS_ENABLED(CONFIG_PDIC_NOTIFIER)
- /* New Interface */
- #if defined(CONFIG_USE_DEDICATED_MUIC)
- muic_notifier.cxt.src = PDIC_NOTIFY_DEV_DEDICATED_MUIC;
- #else
- muic_notifier.cxt.src = PDIC_NOTIFY_DEV_MUIC;
- #endif
- muic_notifier.cxt.dest = dest;
- muic_notifier.cxt.id = PDIC_NOTIFY_ID_ATTACH;
- muic_notifier.cxt.attach = attach;
- muic_notifier.cxt.cable_type = type;
- muic_notifier.cxt.rprd = 0;
- #endif
- }
- static void __set_noti_cxt(int attach, int type)
- {
- #if IS_ENABLED(CONFIG_PDIC_NOTIFIER)
- __set_noti_cxt_dest(attach, type, PDIC_NOTIFY_DEV_ALL);
- #else
- __set_noti_cxt_dest(attach, type, 0);
- #endif
- }
- #if IS_ENABLED(CONFIG_PDIC_SLSI_NON_MCU)
- static void __set_pdic_noti_cxt(int attach, int type)
- {
- if (type < 0) {
- muic_pdic_notifier.cmd = attach;
- #if IS_ENABLED(CONFIG_PDIC_NOTIFIER)
- muic_pdic_notifier.cxt.attach = attach;
- #endif
- return;
- }
- /* Old Interface */
- muic_pdic_notifier.cmd = attach;
- muic_pdic_notifier.attached_dev = type;
- #if IS_ENABLED(CONFIG_PDIC_NOTIFIER)
- /* New Interface */
- #if defined(CONFIG_USE_DEDICATED_MUIC)
- muic_pdic_notifier.cxt.src = PDIC_NOTIFY_DEV_DEDICATED_MUIC;
- #else
- muic_pdic_notifier.cxt.src = PDIC_NOTIFY_DEV_MUIC;
- #endif
- muic_pdic_notifier.cxt.dest = PDIC_NOTIFY_DEV_ALL;
- muic_pdic_notifier.cxt.id = PDIC_NOTIFY_ID_ATTACH;
- muic_pdic_notifier.cxt.attach = attach;
- muic_pdic_notifier.cxt.cable_type = type;
- muic_pdic_notifier.cxt.rprd = 0;
- #endif
- }
- #endif
- #if IS_ENABLED(CONFIG_MUIC_POGO)
- static void __set_pogo_noti_cxt(int attach, int type)
- {
- #if IS_ENABLED(CONFIG_PDIC_NOTIFIER)
- if (type < 0) {
- muic_notifier.pogo_cxt.attach = attach;
- return;
- }
- /* New Interface */
- muic_notifier.pogo_cxt.src = PDIC_NOTIFY_DEV_MUIC;
- muic_notifier.pogo_cxt.dest = PDIC_NOTIFY_DEV_ALL;
- muic_notifier.pogo_cxt.id = PDIC_NOTIFY_ID_POGO;
- muic_notifier.pogo_cxt.attach = attach;
- muic_notifier.pogo_cxt.cable_type = type;
- muic_notifier.pogo_cxt.rprd = 0;
- #endif
- }
- #endif /* CONFIG_MUIC_POGO */
- int muic_notifier_register(struct notifier_block *nb, notifier_fn_t notifier,
- muic_notifier_device_t listener)
- {
- int ret = 0;
- #if IS_ENABLED(CONFIG_PDIC_NOTIFIER)
- void *pcxt;
- #endif
- pr_info("%s: listener=%d register\n", __func__, listener);
- if (!muic_notifier_init_done)
- muic_notifier_init();
- SET_MUIC_NOTIFIER_BLOCK(nb, notifier, listener);
- ret = blocking_notifier_chain_register(&(muic_notifier.notifier_call_chain), nb);
- if (ret < 0)
- pr_err("%s: blocking_notifier_chain_register error(%d)\n",
- __func__, ret);
- #if IS_ENABLED(CONFIG_PDIC_NOTIFIER)
- pcxt = muic_uses_new_noti ? &(muic_notifier.cxt) :
- (void *)&(muic_notifier.attached_dev);
- /* current muic's attached_device status notify */
- nb->notifier_call(nb, muic_notifier.cxt.attach, pcxt);
- #if IS_ENABLED(CONFIG_MUIC_POGO)
- nb->notifier_call(nb, muic_notifier.pogo_cxt.attach, &(muic_notifier.pogo_cxt));
- #endif /* CONFIG_MUIC_POGO */
- #else
- nb->notifier_call(nb, muic_notifier.cmd,
- &(muic_notifier.attached_dev));
- #endif
- return ret;
- }
- EXPORT_SYMBOL(muic_notifier_register);
- int muic_notifier_unregister(struct notifier_block *nb)
- {
- int ret = 0;
- pr_info("%s: listener=%d unregister\n", __func__, nb->priority);
- ret = blocking_notifier_chain_unregister(&(muic_notifier.notifier_call_chain), nb);
- if (ret < 0)
- pr_err("%s: blocking_notifier_chain_unregister error(%d)\n",
- __func__, ret);
- DESTROY_MUIC_NOTIFIER_BLOCK(nb);
- return ret;
- }
- EXPORT_SYMBOL(muic_notifier_unregister);
- static int muic_notifier_notify(void)
- {
- int ret = 0;
- #if IS_ENABLED(CONFIG_PDIC_NOTIFIER)
- void *pcxt;
- pr_info("%s: CMD=%d, DATA=%d\n", __func__, muic_notifier.cxt.attach,
- muic_notifier.cxt.cable_type);
- pcxt = muic_uses_new_noti ? &(muic_notifier.cxt) :
- (void *)&(muic_notifier.attached_dev);
- ret = blocking_notifier_call_chain(&(muic_notifier.notifier_call_chain),
- muic_notifier.cxt.attach, pcxt);
- #else
- pr_info("%s: CMD=%d, DATA=%d\n", __func__, muic_notifier.cmd,
- muic_notifier.attached_dev);
- ret = blocking_notifier_call_chain(&(muic_notifier.notifier_call_chain),
- muic_notifier.cmd, &(muic_notifier.attached_dev));
- #endif
- #if IS_ENABLED(CONFIG_SEC_FACTORY)
- #if IS_ENABLED(CONFIG_ANDROID_SWITCH) || IS_ENABLED(CONFIG_SWITCH)
- #if defined(CONFIG_MUIC_SUPPORT_PDIC) && defined(CONFIG_PDIC_NOTIFIER)
- if (muic_notifier.cxt.attach != 0)
- send_muic_cable_intent(muic_notifier.cxt.cable_type);
- else
- send_muic_cable_intent(0);
- #else
- if (muic_notifier.cmd != 0)
- send_muic_cable_intent(muic_notifier.attached_dev);
- else
- send_muic_cable_intent(0);
- #if IS_ENABLED(CONFIG_MUIC_POGO)
- if (muic_notifier.pogo_cxt.cable_type)
- send_muic_cable_intent(muic_notifier.pogo_cxt.cable_type);
- #endif /* CONFIG_MUIC_POGO */
- #endif /* CONFIG_MUIC_SUPPORT_PDIC */
- #endif /* CONFIG_ANDROID_SWITCH || CONFIG_SWITCH */
- #endif /* CONFIG_SEC_FACTORY */
- switch (ret) {
- case NOTIFY_STOP_MASK:
- case NOTIFY_BAD:
- pr_err("%s: notify error occur(0x%x)\n", __func__, ret);
- break;
- case NOTIFY_DONE:
- case NOTIFY_OK:
- pr_info("%s: notify done(0x%x)\n", __func__, ret);
- break;
- default:
- pr_info("%s: notify status unknown(0x%x)\n", __func__, ret);
- break;
- }
- return ret;
- }
- #if IS_ENABLED(CONFIG_PDIC_SLSI_NON_MCU)
- int muic_pdic_notifier_register(struct notifier_block *nb, notifier_fn_t notifier,
- muic_notifier_device_t listener)
- {
- int ret = 0;
- #if IS_ENABLED(CONFIG_PDIC_NOTIFIER)
- void *pcxt;
- #endif
- pr_info("%s: listener=%d register\n", __func__, listener);
- SET_MUIC_NOTIFIER_BLOCK(nb, notifier, listener);
- ret = blocking_notifier_chain_register(&(muic_pdic_notifier.notifier_call_chain), nb);
- if (ret < 0)
- pr_err("%s: blocking_notifier_chain_register error(%d)\n",
- __func__, ret);
- #if IS_ENABLED(CONFIG_PDIC_NOTIFIER)
- pcxt = muic_pdic_uses_new_noti ? &(muic_pdic_notifier.cxt) : \
- (void *)&(muic_pdic_notifier.attached_dev);
- /* current muic's attached_device status notify */
- nb->notifier_call(nb, muic_pdic_notifier.cxt.attach, pcxt);
- #else
- nb->notifier_call(nb, muic_pdic_notifier.cmd,
- &(muic_pdic_notifier.attached_dev));
- #endif
- return ret;
- }
- EXPORT_SYMBOL(muic_pdic_notifier_register);
- int muic_pdic_notifier_unregister(struct notifier_block *nb)
- {
- int ret = 0;
- pr_info("%s: listener=%d unregister\n", __func__, nb->priority);
- ret = blocking_notifier_chain_unregister(&(muic_pdic_notifier.notifier_call_chain), nb);
- if (ret < 0)
- pr_err("%s: blocking_notifier_chain_unregister error(%d)\n",
- __func__, ret);
- DESTROY_MUIC_NOTIFIER_BLOCK(nb);
- return ret;
- }
- EXPORT_SYMBOL(muic_pdic_notifier_unregister);
- static int muic_pdic_notifier_notify(void)
- {
- int ret = 0;
- #if IS_ENABLED(CONFIG_PDIC_NOTIFIER)
- void *pcxt;
- pr_info("%s: CMD=%d, DATA=%d\n", __func__, muic_pdic_notifier.cxt.attach,
- muic_pdic_notifier.cxt.cable_type);
- pcxt = muic_pdic_uses_new_noti ? &(muic_pdic_notifier.cxt) : \
- (void *)&(muic_pdic_notifier.attached_dev);
- ret = blocking_notifier_call_chain(&(muic_pdic_notifier.notifier_call_chain),
- muic_pdic_notifier.cxt.attach, pcxt);
- #else
- pr_info("%s: CMD=%d, DATA=%d\n", __func__, muic_pdic_notifier.cmd,
- muic_pdic_notifier.attached_dev);
- ret = blocking_notifier_call_chain(&(muic_pdic_notifier.notifier_call_chain),
- muic_pdic_notifier.cmd, &(muic_pdic_notifier.attached_dev));
- #endif
- switch (ret) {
- case NOTIFY_STOP_MASK:
- case NOTIFY_BAD:
- pr_err("%s: notify error occur(0x%x)\n", __func__, ret);
- break;
- case NOTIFY_DONE:
- case NOTIFY_OK:
- pr_info("%s: notify done(0x%x)\n", __func__, ret);
- break;
- default:
- pr_info("%s: notify status unknown(0x%x)\n", __func__, ret);
- break;
- }
- return ret;
- }
- #endif /* CONFIG_PDIC_SLSI_NON_MCU */
- #if IS_ENABLED(CONFIG_MUIC_POGO)
- static int muic_pogo_notifier_notify(void)
- {
- int ret = 0;
- #if IS_ENABLED(CONFIG_PDIC_NOTIFIER)
- void *pcxt = &(muic_notifier.pogo_cxt);
- pr_info("%s: CMD=%d, DATA=%d\n", __func__, muic_notifier.pogo_cxt.attach,
- muic_notifier.pogo_cxt.cable_type);
- ret = blocking_notifier_call_chain(&(muic_notifier.notifier_call_chain),
- muic_notifier.pogo_cxt.attach, pcxt);
- #endif
- #if IS_ENABLED(CONFIG_SEC_FACTORY)
- #if defined(CONFIG_MUIC_SUPPORT_PDIC) && defined(CONFIG_PDIC_NOTIFIER)
- if (muic_notifier.pogo_cxt.attach != 0)
- send_muic_cable_intent(muic_notifier.pogo_cxt.cable_type);
- else
- send_muic_cable_intent(0);
- if (muic_notifier.cxt.cable_type)
- send_muic_cable_intent(muic_notifier.cxt.cable_type);
- #endif /* CONFIG_MUIC_SUPPORT_CCIC */
- #endif /* CONFIG_SEC_FACTORY */
- switch (ret) {
- case NOTIFY_STOP_MASK:
- case NOTIFY_BAD:
- pr_err("%s: notify error occur(0x%x)\n", __func__, ret);
- break;
- case NOTIFY_DONE:
- case NOTIFY_OK:
- pr_info("%s: notify done(0x%x)\n", __func__, ret);
- break;
- default:
- pr_info("%s: notify status unknown(0x%x)\n", __func__, ret);
- break;
- }
- return ret;
- }
- void muic_pogo_notifier_attach_attached_dev(muic_attached_dev_t new_dev)
- {
- pr_info("%s: (%d)\n", __func__, new_dev);
- __set_pogo_noti_cxt(MUIC_NOTIFY_CMD_ATTACH, new_dev);
- /* muic's attached_device attach broadcast */
- muic_pogo_notifier_notify();
- }
- EXPORT_SYMBOL(muic_pogo_notifier_attach_attached_dev);
- void muic_pogo_notifier_detach_attached_dev(muic_attached_dev_t cur_dev)
- {
- pr_info("%s: (%d)\n", __func__, cur_dev);
- __set_pogo_noti_cxt(MUIC_NOTIFY_CMD_DETACH, -1);
- #if IS_ENABLED(CONFIG_PDIC_NOTIFIER)
- if (muic_notifier.pogo_cxt.cable_type != cur_dev)
- pr_warn("%s: attached_dev of muic_notifier(%d) != muic_data(%d)\n",
- __func__, muic_notifier.pogo_cxt.cable_type, cur_dev);
- if (muic_notifier.pogo_cxt.cable_type != ATTACHED_DEV_NONE_MUIC) {
- /* muic's attached_device detach broadcast */
- muic_pogo_notifier_notify();
- }
- #endif
- __set_pogo_noti_cxt(0, ATTACHED_DEV_NONE_MUIC);
- }
- EXPORT_SYMBOL(muic_pogo_notifier_detach_attached_dev);
- #endif /* CONFIG_MUIC_POGO */
- void muic_notifier_attach_attached_dev(muic_attached_dev_t new_dev)
- {
- pr_info("%s: (%d)\n", __func__, new_dev);
- __set_noti_cxt(MUIC_NOTIFY_CMD_ATTACH, new_dev);
- /* muic's attached_device attach broadcast */
- muic_notifier_notify();
- }
- EXPORT_SYMBOL(muic_notifier_attach_attached_dev);
- void muic_pdic_notifier_attach_attached_dev(muic_attached_dev_t new_dev)
- {
- pr_info("%s: (%d)\n", __func__, new_dev);
- #if IS_ENABLED(CONFIG_PDIC_SLSI_NON_MCU)
- __set_pdic_noti_cxt(MUIC_PDIC_NOTIFY_CMD_ATTACH, new_dev);
- /* muic's attached_device attach broadcast */
- muic_pdic_notifier_notify();
- #else
- __set_noti_cxt(MUIC_PDIC_NOTIFY_CMD_ATTACH, new_dev);
- /* muic's attached_device attach broadcast */
- muic_notifier_notify();
- #endif
- }
- EXPORT_SYMBOL(muic_pdic_notifier_attach_attached_dev);
- void muic_pdic_notifier_detach_attached_dev(muic_attached_dev_t new_dev)
- {
- pr_info("%s: (%d)\n", __func__, new_dev);
- #if IS_ENABLED(CONFIG_PDIC_SLSI_NON_MCU)
- __set_pdic_noti_cxt(MUIC_PDIC_NOTIFY_CMD_DETACH, new_dev);
- /* muic's attached_device attach broadcast */
- muic_pdic_notifier_notify();
- #else
- __set_noti_cxt(MUIC_PDIC_NOTIFY_CMD_DETACH, muic_notifier.attached_dev);
- /* muic's attached_device attach broadcast */
- muic_notifier_notify();
- #endif
- }
- EXPORT_SYMBOL(muic_pdic_notifier_detach_attached_dev);
- void muic_notifier_detach_attached_dev(muic_attached_dev_t cur_dev)
- {
- pr_info("%s: (%d)\n", __func__, cur_dev);
- __set_noti_cxt(MUIC_NOTIFY_CMD_DETACH, -1);
- #if IS_ENABLED(CONFIG_PDIC_NOTIFIER)
- if (muic_notifier.cxt.cable_type != cur_dev)
- pr_warn("%s: attached_dev of muic_notifier(%d) != muic_data(%d)\n",
- __func__, muic_notifier.cxt.cable_type, cur_dev);
- if (muic_notifier.cxt.cable_type != ATTACHED_DEV_NONE_MUIC) {
- /* muic's attached_device detach broadcast */
- muic_notifier_notify();
- }
- #else
- if (muic_notifier.attached_dev != cur_dev)
- pr_warn("%s: attached_dev of muic_notifier(%d) != muic_data(%d)\n",
- __func__, muic_notifier.attached_dev, cur_dev);
- if (muic_notifier.attached_dev != ATTACHED_DEV_NONE_MUIC) {
- /* muic's attached_device detach broadcast */
- muic_notifier_notify();
- }
- #endif
- __set_noti_cxt(0, ATTACHED_DEV_NONE_MUIC);
- }
- EXPORT_SYMBOL(muic_notifier_detach_attached_dev);
- void muic_notifier_logically_attach_attached_dev(muic_attached_dev_t new_dev)
- {
- pr_info("%s: (%d)\n", __func__, new_dev);
- __set_noti_cxt(MUIC_NOTIFY_CMD_ATTACH, new_dev);
- /* muic's attached_device attach broadcast */
- muic_notifier_notify();
- }
- EXPORT_SYMBOL(muic_notifier_logically_attach_attached_dev);
- void muic_notifier_logically_detach_attached_dev(muic_attached_dev_t cur_dev)
- {
- pr_info("%s: (%d)\n", __func__, cur_dev);
- __set_noti_cxt(MUIC_NOTIFY_CMD_DETACH, cur_dev);
- /* muic's attached_device detach broadcast */
- muic_notifier_notify();
- __set_noti_cxt(0, ATTACHED_DEV_NONE_MUIC);
- }
- EXPORT_SYMBOL(muic_notifier_logically_detach_attached_dev);
- #if IS_ENABLED(CONFIG_VIRTUAL_MUIC)
- void vt_muic_notifier_attach_attached_dev(muic_attached_dev_t new_dev)
- {
- pr_info("%s: (%d)\n", __func__, new_dev);
- __set_noti_cxt_dest(MUIC_NOTIFY_CMD_ATTACH, new_dev, PDIC_NOTIFY_DEV_PDIC);
- /* muic's attached_device attach broadcast */
- muic_notifier_notify();
- }
- EXPORT_SYMBOL(vt_muic_notifier_attach_attached_dev);
- void vt_muic_notifier_detach_attached_dev(muic_attached_dev_t cur_dev)
- {
- pr_info("%s: (%d)\n", __func__, cur_dev);
- __set_noti_cxt_dest(MUIC_NOTIFY_CMD_DETACH, -1, PDIC_NOTIFY_DEV_PDIC);
- #if IS_ENABLED(CONFIG_PDIC_NOTIFIER)
- if (muic_notifier.cxt.cable_type != cur_dev)
- pr_warn("%s: attached_dev of muic_notifier(%d) != muic_data(%d)\n",
- __func__, muic_notifier.cxt.cable_type, cur_dev);
- if (muic_notifier.cxt.cable_type != ATTACHED_DEV_NONE_MUIC) {
- /* muic's attached_device detach broadcast */
- muic_notifier_notify();
- }
- #else
- if (muic_notifier.attached_dev != cur_dev)
- pr_warn("%s: attached_dev of muic_notifier(%d) != muic_data(%d)\n",
- __func__, muic_notifier.attached_dev, cur_dev);
- if (muic_notifier.attached_dev != ATTACHED_DEV_NONE_MUIC) {
- /* muic's attached_device detach broadcast */
- muic_notifier_notify();
- }
- #endif
- __set_noti_cxt(0, ATTACHED_DEV_NONE_MUIC);
- }
- EXPORT_SYMBOL(vt_muic_notifier_detach_attached_dev);
- #endif
- static int muic_notifier_init(void)
- {
- int ret = 0;
- pr_info("%s\n", __func__);
- if (muic_notifier_init_done) {
- pr_info("%s already registered\n", __func__);
- return ret;
- }
- muic_notifier_init_done = 1;
- #if IS_ENABLED(CONFIG_DRV_SAMSUNG)
- switch_device = sec_device_create(NULL, "switch");
- if (IS_ERR(switch_device)) {
- pr_err("%s Failed to create device(switch)!\n", __func__);
- ret = -ENODEV;
- }
- #endif
- #if IS_ENABLED(CONFIG_PDIC_NOTIFIER)
- muic_uses_new_noti = 1;
- #endif
- BLOCKING_INIT_NOTIFIER_HEAD(&(muic_notifier.notifier_call_chain));
- __set_noti_cxt(0, ATTACHED_DEV_NONE_MUIC);
- #if IS_ENABLED(CONFIG_PDIC_SLSI_NON_MCU)
- BLOCKING_INIT_NOTIFIER_HEAD(&(muic_pdic_notifier.notifier_call_chain));
- __set_pdic_noti_cxt(0, ATTACHED_DEV_UNKNOWN_MUIC);
- muic_pdic_uses_new_noti = 1;
- #endif
- #if IS_ENABLED(CONFIG_MUIC_POGO)
- __set_pogo_noti_cxt(0, ATTACHED_DEV_NONE_MUIC);
- #endif /* CONFIG_MUIC_POGO */
- #if IS_ENABLED(CONFIG_SEC_FACTORY)
- #if IS_ENABLED(CONFIG_ANDROID_SWITCH) || IS_ENABLED(CONFIG_SWITCH)
- ret = switch_dev_register(&switch_muic_dev);
- if (ret < 0)
- pr_err("%s: Failed to register attached_muic_cable switch(%d)\n",
- __func__, ret);
- #endif /* CONFIG_ANDROID_SWITCH || CONFIG_SWITCH */
- #endif
- return ret;
- }
- static void __exit muic_notifier_exit(void)
- {
- pr_info("%s: exit\n", __func__);
- }
- device_initcall(muic_notifier_init);
- module_exit(muic_notifier_exit);
- MODULE_AUTHOR("Samsung USB Team");
- MODULE_DESCRIPTION("Muic Notifier");
- MODULE_LICENSE("GPL");
|