Lines Matching defs:kcs_bmc

12 #include "kcs_bmc.h"
25 u8 kcs_bmc_read_data(struct kcs_bmc_device *kcs_bmc)
27 return kcs_bmc->ops->io_inputb(kcs_bmc, kcs_bmc->ioreg.idr);
31 void kcs_bmc_write_data(struct kcs_bmc_device *kcs_bmc, u8 data)
33 kcs_bmc->ops->io_outputb(kcs_bmc, kcs_bmc->ioreg.odr, data);
37 u8 kcs_bmc_read_status(struct kcs_bmc_device *kcs_bmc)
39 return kcs_bmc->ops->io_inputb(kcs_bmc, kcs_bmc->ioreg.str);
43 void kcs_bmc_write_status(struct kcs_bmc_device *kcs_bmc, u8 data)
45 kcs_bmc->ops->io_outputb(kcs_bmc, kcs_bmc->ioreg.str, data);
49 void kcs_bmc_update_status(struct kcs_bmc_device *kcs_bmc, u8 mask, u8 val)
51 kcs_bmc->ops->io_updateb(kcs_bmc, kcs_bmc->ioreg.str, mask, val);
55 irqreturn_t kcs_bmc_handle_event(struct kcs_bmc_device *kcs_bmc)
61 spin_lock_irqsave(&kcs_bmc->lock, flags);
62 client = kcs_bmc->client;
65 spin_unlock_irqrestore(&kcs_bmc->lock, flags);
71 int kcs_bmc_enable_device(struct kcs_bmc_device *kcs_bmc, struct kcs_bmc_client *client)
75 spin_lock_irq(&kcs_bmc->lock);
76 if (kcs_bmc->client) {
81 kcs_bmc->client = client;
82 kcs_bmc_update_event_mask(kcs_bmc, mask, mask);
85 spin_unlock_irq(&kcs_bmc->lock);
91 void kcs_bmc_disable_device(struct kcs_bmc_device *kcs_bmc, struct kcs_bmc_client *client)
93 spin_lock_irq(&kcs_bmc->lock);
94 if (client == kcs_bmc->client) {
97 kcs_bmc_update_event_mask(kcs_bmc, mask, 0);
98 kcs_bmc->client = NULL;
100 spin_unlock_irq(&kcs_bmc->lock);
104 int kcs_bmc_add_device(struct kcs_bmc_device *kcs_bmc)
110 spin_lock_init(&kcs_bmc->lock);
111 kcs_bmc->client = NULL;
114 list_add(&kcs_bmc->entry, &kcs_bmc_devices);
116 rc = drv->ops->add_device(kcs_bmc);
120 dev_err(kcs_bmc->dev, "Failed to add chardev for KCS channel %d: %d",
121 kcs_bmc->channel, rc);
130 void kcs_bmc_remove_device(struct kcs_bmc_device *kcs_bmc)
136 list_del(&kcs_bmc->entry);
138 rc = drv->ops->remove_device(kcs_bmc);
140 dev_err(kcs_bmc->dev, "Failed to remove chardev for KCS channel %d: %d",
141 kcs_bmc->channel, rc);
149 struct kcs_bmc_device *kcs_bmc;
154 list_for_each_entry(kcs_bmc, &kcs_bmc_devices, entry) {
155 rc = drv->ops->add_device(kcs_bmc);
157 dev_err(kcs_bmc->dev, "Failed to add driver for KCS channel %d: %d",
158 kcs_bmc->channel, rc);
166 struct kcs_bmc_device *kcs_bmc;
171 list_for_each_entry(kcs_bmc, &kcs_bmc_devices, entry) {
172 rc = drv->ops->remove_device(kcs_bmc);
174 dev_err(kcs_bmc->dev, "Failed to remove driver for KCS channel %d: %d",
175 kcs_bmc->channel, rc);
181 void kcs_bmc_update_event_mask(struct kcs_bmc_device *kcs_bmc, u8 mask, u8 events)
183 kcs_bmc->ops->irq_mask_update(kcs_bmc, mask, events);