1a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea/* 2a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea * HSI clients registration interface 3a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea * 4a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea * Copyright (C) 2010 Nokia Corporation. All rights reserved. 5a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea * 6a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea * Contact: Carlos Chinea <carlos.chinea@nokia.com> 7a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea * 8a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea * This program is free software; you can redistribute it and/or 9a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea * modify it under the terms of the GNU General Public License 10a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea * version 2 as published by the Free Software Foundation. 11a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea * 12a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea * This program is distributed in the hope that it will be useful, but 13a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea * WITHOUT ANY WARRANTY; without even the implied warranty of 14a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea * General Public License for more details. 16a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea * 17a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea * You should have received a copy of the GNU General Public License 18a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea * along with this program; if not, write to the Free Software 19a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 20a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea * 02110-1301 USA 21a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea */ 22a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea#include <linux/hsi/hsi.h> 23a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea#include <linux/list.h> 24a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea#include <linux/slab.h> 25a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea#include "hsi_core.h" 26a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea 27a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea/* 28a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea * hsi_board_list is only used internally by the HSI framework. 29a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea * No one else is allowed to make use of it. 30a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea */ 31a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos ChineaLIST_HEAD(hsi_board_list); 32a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos ChineaEXPORT_SYMBOL_GPL(hsi_board_list); 33a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea 34a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea/** 35a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea * hsi_register_board_info - Register HSI clients information 36a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea * @info: Array of HSI clients on the board 37a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea * @len: Length of the array 38a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea * 39a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea * HSI clients are statically declared and registered on board files. 40a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea * 41a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea * HSI clients will be automatically registered to the HSI bus once the 42a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea * controller and the port where the clients wishes to attach are registered 43a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea * to it. 44a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea * 45a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea * Return -errno on failure, 0 on success. 46a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea */ 47a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chineaint __init hsi_register_board_info(struct hsi_board_info const *info, 48a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea unsigned int len) 49a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea{ 50a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea struct hsi_cl_info *cl_info; 51a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea 52a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea cl_info = kzalloc(sizeof(*cl_info) * len, GFP_KERNEL); 53a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea if (!cl_info) 54a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea return -ENOMEM; 55a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea 56a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea for (; len; len--, info++, cl_info++) { 57a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea cl_info->info = *info; 58a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea list_add_tail(&cl_info->list, &hsi_board_list); 59a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea } 60a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea 61a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea return 0; 62a056ab8c7a00a0ffc52e9573bf01257004c2d08cCarlos Chinea} 63