1a02509f3SAlexander Shishkin // SPDX-License-Identifier: GPL-2.0 2a02509f3SAlexander Shishkin /* 3a02509f3SAlexander Shishkin * Basic framing protocol for STM devices. 4a02509f3SAlexander Shishkin * Copyright (c) 2018, Intel Corporation. 5a02509f3SAlexander Shishkin */ 6a02509f3SAlexander Shishkin 7a02509f3SAlexander Shishkin #include <linux/module.h> 8a02509f3SAlexander Shishkin #include <linux/device.h> 9a02509f3SAlexander Shishkin #include <linux/stm.h> 10a02509f3SAlexander Shishkin #include "stm.h" 11a02509f3SAlexander Shishkin 12a02509f3SAlexander Shishkin static ssize_t basic_write(struct stm_data *data, struct stm_output *output, 13*ee27f44eSMikhail Lappo unsigned int chan, const char *buf, size_t count, 14*ee27f44eSMikhail Lappo struct stm_source_data *source) 15a02509f3SAlexander Shishkin { 16a02509f3SAlexander Shishkin unsigned int c = output->channel + chan; 17a02509f3SAlexander Shishkin unsigned int m = output->master; 18a02509f3SAlexander Shishkin const unsigned char nil = 0; 19a02509f3SAlexander Shishkin ssize_t sz; 20a02509f3SAlexander Shishkin 21a02509f3SAlexander Shishkin sz = stm_data_write(data, m, c, true, buf, count); 22a02509f3SAlexander Shishkin if (sz > 0) 23a02509f3SAlexander Shishkin data->packet(data, m, c, STP_PACKET_FLAG, 0, 0, &nil); 24a02509f3SAlexander Shishkin 25a02509f3SAlexander Shishkin return sz; 26a02509f3SAlexander Shishkin } 27a02509f3SAlexander Shishkin 28a02509f3SAlexander Shishkin static const struct stm_protocol_driver basic_pdrv = { 29a02509f3SAlexander Shishkin .owner = THIS_MODULE, 30a02509f3SAlexander Shishkin .name = "p_basic", 31a02509f3SAlexander Shishkin .write = basic_write, 32a02509f3SAlexander Shishkin }; 33a02509f3SAlexander Shishkin 34a02509f3SAlexander Shishkin static int basic_stm_init(void) 35a02509f3SAlexander Shishkin { 36a02509f3SAlexander Shishkin return stm_register_protocol(&basic_pdrv); 37a02509f3SAlexander Shishkin } 38a02509f3SAlexander Shishkin 39a02509f3SAlexander Shishkin static void basic_stm_exit(void) 40a02509f3SAlexander Shishkin { 41a02509f3SAlexander Shishkin stm_unregister_protocol(&basic_pdrv); 42a02509f3SAlexander Shishkin } 43a02509f3SAlexander Shishkin 44a02509f3SAlexander Shishkin module_init(basic_stm_init); 45a02509f3SAlexander Shishkin module_exit(basic_stm_exit); 46a02509f3SAlexander Shishkin 47a02509f3SAlexander Shishkin MODULE_LICENSE("GPL v2"); 48a02509f3SAlexander Shishkin MODULE_DESCRIPTION("Basic STM framing protocol driver"); 49a02509f3SAlexander Shishkin MODULE_AUTHOR("Alexander Shishkin <alexander.shishkin@linux.intel.com>"); 50