Lines Matching refs:hc

88 static inline int smb_hc_read(struct acpi_smb_hc *hc, u8 address, u8 *data)
90 return ec_read(hc->offset + address, data);
93 static inline int smb_hc_write(struct acpi_smb_hc *hc, u8 address, u8 data)
95 return ec_write(hc->offset + address, data);
98 static int wait_transaction_complete(struct acpi_smb_hc *hc, int timeout)
100 if (wait_event_timeout(hc->wait, hc->done, msecs_to_jiffies(timeout)))
105 static int acpi_smbus_transaction(struct acpi_smb_hc *hc, u8 protocol,
111 if (!hc) {
116 mutex_lock(&hc->lock);
117 hc->done = false;
118 if (smb_hc_read(hc, ACPI_SMB_PROTOCOL, &temp))
124 smb_hc_write(hc, ACPI_SMB_COMMAND, command);
126 smb_hc_write(hc, ACPI_SMB_BLOCK_COUNT, length);
128 smb_hc_write(hc, ACPI_SMB_DATA + i, data[i]);
130 smb_hc_write(hc, ACPI_SMB_ADDRESS, address << 1);
131 smb_hc_write(hc, ACPI_SMB_PROTOCOL, protocol);
136 ret = wait_transaction_complete(hc, 1000);
148 if (smb_hc_read(hc, ACPI_SMB_BLOCK_COUNT, &sz)) {
156 smb_hc_read(hc, ACPI_SMB_DATA + i, &data[i]);
158 mutex_unlock(&hc->lock);
162 int acpi_smbus_read(struct acpi_smb_hc *hc, u8 protocol, u8 address,
165 return acpi_smbus_transaction(hc, protocol, address, command, data, 0);
170 int acpi_smbus_write(struct acpi_smb_hc *hc, u8 protocol, u8 address,
173 return acpi_smbus_transaction(hc, protocol, address, command, data, length);
178 int acpi_smbus_register_callback(struct acpi_smb_hc *hc,
181 mutex_lock(&hc->lock);
182 hc->callback = callback;
183 hc->context = context;
184 mutex_unlock(&hc->lock);
190 int acpi_smbus_unregister_callback(struct acpi_smb_hc *hc)
192 mutex_lock(&hc->lock);
193 hc->callback = NULL;
194 hc->context = NULL;
195 mutex_unlock(&hc->lock);
204 struct acpi_smb_hc *hc = context;
205 if (hc->callback)
206 hc->callback(hc->context);
211 struct acpi_smb_hc *hc = context;
214 if (smb_hc_read(hc, ACPI_SMB_STATUS, &status.raw))
218 hc->done = true;
219 wake_up(&hc->wait);
223 mutex_lock(&hc->lock);
224 smb_hc_read(hc, ACPI_SMB_ALARM_ADDRESS, &address);
226 smb_hc_write(hc, ACPI_SMB_STATUS, status.raw);
233 acpi_smbus_callback, hc);
235 mutex_unlock(&hc->lock);
249 struct acpi_smb_hc *hc;
263 hc = kzalloc(sizeof(struct acpi_smb_hc), GFP_KERNEL);
264 if (!hc)
266 mutex_init(&hc->lock);
267 init_waitqueue_head(&hc->wait);
269 hc->ec = acpi_driver_data(acpi_dev_parent(device));
270 hc->offset = (val >> 8) & 0xff;
271 hc->query_bit = val & 0xff;
272 device->driver_data = hc;
274 acpi_ec_add_query_handler(hc->ec, hc->query_bit, NULL, smbus_alarm, hc);
276 hc->offset, hc->query_bit);
285 struct acpi_smb_hc *hc;
290 hc = acpi_driver_data(device);
291 acpi_ec_remove_query_handler(hc->ec, hc->query_bit);
293 kfree(hc);