18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Basic framing protocol for STM devices. 48c2ecf20Sopenharmony_ci * Copyright (c) 2018, Intel Corporation. 58c2ecf20Sopenharmony_ci */ 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci#include <linux/module.h> 88c2ecf20Sopenharmony_ci#include <linux/device.h> 98c2ecf20Sopenharmony_ci#include <linux/stm.h> 108c2ecf20Sopenharmony_ci#include "stm.h" 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_cistatic ssize_t basic_write(struct stm_data *data, struct stm_output *output, 138c2ecf20Sopenharmony_ci unsigned int chan, const char *buf, size_t count) 148c2ecf20Sopenharmony_ci{ 158c2ecf20Sopenharmony_ci unsigned int c = output->channel + chan; 168c2ecf20Sopenharmony_ci unsigned int m = output->master; 178c2ecf20Sopenharmony_ci const unsigned char nil = 0; 188c2ecf20Sopenharmony_ci ssize_t sz; 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_ci sz = stm_data_write(data, m, c, true, buf, count); 218c2ecf20Sopenharmony_ci if (sz > 0) 228c2ecf20Sopenharmony_ci data->packet(data, m, c, STP_PACKET_FLAG, 0, 0, &nil); 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci return sz; 258c2ecf20Sopenharmony_ci} 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_cistatic const struct stm_protocol_driver basic_pdrv = { 288c2ecf20Sopenharmony_ci .owner = THIS_MODULE, 298c2ecf20Sopenharmony_ci .name = "p_basic", 308c2ecf20Sopenharmony_ci .write = basic_write, 318c2ecf20Sopenharmony_ci}; 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_cistatic int basic_stm_init(void) 348c2ecf20Sopenharmony_ci{ 358c2ecf20Sopenharmony_ci return stm_register_protocol(&basic_pdrv); 368c2ecf20Sopenharmony_ci} 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_cistatic void basic_stm_exit(void) 398c2ecf20Sopenharmony_ci{ 408c2ecf20Sopenharmony_ci stm_unregister_protocol(&basic_pdrv); 418c2ecf20Sopenharmony_ci} 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_cimodule_init(basic_stm_init); 448c2ecf20Sopenharmony_cimodule_exit(basic_stm_exit); 458c2ecf20Sopenharmony_ci 468c2ecf20Sopenharmony_ciMODULE_LICENSE("GPL v2"); 478c2ecf20Sopenharmony_ciMODULE_DESCRIPTION("Basic STM framing protocol driver"); 488c2ecf20Sopenharmony_ciMODULE_AUTHOR("Alexander Shishkin <alexander.shishkin@linux.intel.com>"); 49