stm class: dummy_stm: Create multiple devices
STM framework should be able to handle multiple STM devices at a time, each one with its own master allocation policy. This patch changes dummy_stm driver to create multiple STM sinks to help testing the framework. Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>hifive-unleashed-5.1
parent
59be422e4c
commit
bcfdf8afde
|
@ -40,22 +40,61 @@ dummy_stm_packet(struct stm_data *stm_data, unsigned int master,
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct stm_data dummy_stm = {
|
#define DUMMY_STM_MAX 32
|
||||||
.name = "dummy_stm",
|
|
||||||
.sw_start = 0x0000,
|
static struct stm_data dummy_stm[DUMMY_STM_MAX];
|
||||||
.sw_end = 0xffff,
|
|
||||||
.sw_nchannels = 0xffff,
|
static int nr_dummies = 4;
|
||||||
.packet = dummy_stm_packet,
|
|
||||||
};
|
module_param(nr_dummies, int, 0600);
|
||||||
|
|
||||||
|
static unsigned int dummy_stm_nr;
|
||||||
|
|
||||||
static int dummy_stm_init(void)
|
static int dummy_stm_init(void)
|
||||||
{
|
{
|
||||||
return stm_register_device(NULL, &dummy_stm, THIS_MODULE);
|
int i, ret = -ENOMEM, __nr_dummies = ACCESS_ONCE(nr_dummies);
|
||||||
|
|
||||||
|
if (__nr_dummies < 0 || __nr_dummies > DUMMY_STM_MAX)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
for (i = 0; i < __nr_dummies; i++) {
|
||||||
|
dummy_stm[i].name = kasprintf(GFP_KERNEL, "dummy_stm.%d", i);
|
||||||
|
if (!dummy_stm[i].name)
|
||||||
|
goto fail_unregister;
|
||||||
|
|
||||||
|
dummy_stm[i].sw_start = 0x0000;
|
||||||
|
dummy_stm[i].sw_end = 0xffff;
|
||||||
|
dummy_stm[i].sw_nchannels = 0xffff;
|
||||||
|
dummy_stm[i].packet = dummy_stm_packet;
|
||||||
|
|
||||||
|
ret = stm_register_device(NULL, &dummy_stm[i], THIS_MODULE);
|
||||||
|
if (ret)
|
||||||
|
goto fail_free;
|
||||||
|
}
|
||||||
|
|
||||||
|
dummy_stm_nr = __nr_dummies;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
fail_unregister:
|
||||||
|
for (i--; i >= 0; i--) {
|
||||||
|
stm_unregister_device(&dummy_stm[i]);
|
||||||
|
fail_free:
|
||||||
|
kfree(dummy_stm[i].name);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dummy_stm_exit(void)
|
static void dummy_stm_exit(void)
|
||||||
{
|
{
|
||||||
stm_unregister_device(&dummy_stm);
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < dummy_stm_nr; i++) {
|
||||||
|
stm_unregister_device(&dummy_stm[i]);
|
||||||
|
kfree(dummy_stm[i].name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module_init(dummy_stm_init);
|
module_init(dummy_stm_init);
|
||||||
|
|
Loading…
Reference in New Issue