static int __init ix8a_bwde_platform_init()

in platform/broadcom/sonic-platform-modules-quanta/ix8a-bwde-56x/modules/qci_platform_ix8a_bwde.c [140:338]


static int __init ix8a_bwde_platform_init(void)
{
	struct i2c_adapter *adapter;
	int ret, i;

	ret = platform_driver_register(&ix8a_bwde_platform_driver);
	if (ret < 0)
		return ret;

	/* Register platform stuff */
	ix8a_bwde_device = platform_device_alloc("qci-ix8a_bwde", -1);
	if (!ix8a_bwde_device) {
		ret = -ENOMEM;
		goto fail_platform_driver;
	}

	ret = platform_device_add(ix8a_bwde_device);
	if (ret)
		goto fail_platform_device;

	g_client = kmalloc(sizeof(*g_client) * numof_i2c_devices, GFP_KERNEL);
	for (i = 0; i < numof_i2c_devices; i++) g_client[i] = NULL;

	g_client_port = kmalloc(sizeof(*g_client_port) * numof_ports, GFP_KERNEL);
	for (i = 0; i < numof_ports; i++) g_client_port[i] = NULL;

	adapter = i2c_get_adapter(0);
	if (adapter == NULL)
	{
		printk("[%s] get i2c adapter fail at line %d", __FUNCTION__, __LINE__);
	}
	else
	{
		g_client[0] = i2c_new_client_device(adapter, &ix8a_bwde_i2c_devices[0]);		// pca9546_1
		g_client[1] = i2c_new_client_device(adapter, &ix8a_bwde_i2c_devices[1]);		// pca9548_1
		g_client[2] = i2c_new_client_device(adapter, &ix8a_bwde_i2c_devices[16]);	// CPU Linking Board at CPU's I2C Bus  //
		i2c_put_adapter(adapter);
	}

	adapter = i2c_get_adapter(0x01);
	if (adapter == NULL)
	{
		printk("[%s] get i2c adapter fail at line %d", __FUNCTION__, __LINE__);
	}
	else
	{
		g_client[3] = i2c_new_client_device(adapter, &ix8a_bwde_i2c_devices[11]);		// CPLD_1
		g_client[4] = i2c_new_client_device(adapter, &ix8a_bwde_i2c_devices[17]);	// CPLD_4  //
		g_client[5] = i2c_new_client_device(adapter, &ix8a_bwde_i2c_devices[18]);	// CPLD_6  //
		i2c_put_adapter(adapter);
	}

	adapter = i2c_get_adapter(0x02);
	if (adapter == NULL)
	{
		printk("[%s] get i2c adapter fail at line %d", __FUNCTION__, __LINE__);
	}
	else
	{
		g_client[6] = i2c_new_client_device(adapter, &ix8a_bwde_i2c_devices[12]);		// CPLD_2
		i2c_put_adapter(adapter);
	}

	adapter = i2c_get_adapter(0x03);
	if (adapter == NULL)
	{
		printk("[%s] get i2c adapter fail at line %d", __FUNCTION__, __LINE__);
	}
	else
	{
		g_client[7] = i2c_new_client_device(adapter, &ix8a_bwde_i2c_devices[13]);		// CPLD_3
		i2c_put_adapter(adapter);
	}

	adapter = i2c_get_adapter(0x04);
	if (adapter == NULL)
	{
		printk("[%s] get i2c adapter fail at line %d", __FUNCTION__, __LINE__);
	}
	else
	{
		g_client[8] = i2c_new_client_device(adapter, &ix8a_bwde_i2c_devices[2]);		// pca9539_1
		g_client[9] = i2c_new_client_device(adapter, &ix8a_bwde_i2c_devices[14]);		// pca9698_QSFP
		i2c_put_adapter(adapter);
	}

	adapter = i2c_get_adapter(0x05);
	if (adapter == NULL)
	{
		printk("[%s] get i2c adapter fail at line %d", __FUNCTION__, __LINE__);
	}
	else
	{
		g_client[10] = i2c_new_client_device(adapter, &ix8a_bwde_i2c_devices[4]);		// pca9548_1 SFP
		i2c_put_adapter(adapter);
	}

	adapter = i2c_get_adapter(0x06);
	if (adapter == NULL)
	{
		printk("[%s] get i2c adapter fail at line %d", __FUNCTION__, __LINE__);
	}
	else
	{
		g_client[11] = i2c_new_client_device(adapter, &ix8a_bwde_i2c_devices[5]);		// pca9548_2 SFP
		i2c_put_adapter(adapter);
	}

	adapter = i2c_get_adapter(0x07);
	if (adapter == NULL)
	{
		printk("[%s] get i2c adapter fail at line %d", __FUNCTION__, __LINE__);
	}
	else
	{
		g_client[12] = i2c_new_client_device(adapter, &ix8a_bwde_i2c_devices[6]);		// pca9548_3 SFP
		i2c_put_adapter(adapter);
	}

	adapter = i2c_get_adapter(0x08);
	if (adapter == NULL)
	{
		printk("[%s] get i2c adapter fail at line %d", __FUNCTION__, __LINE__);
	}
	else
	{
		g_client[13] = i2c_new_client_device(adapter, &ix8a_bwde_i2c_devices[7]);		// pca9548_4 SFP
		i2c_put_adapter(adapter);
	}

	adapter = i2c_get_adapter(0x09);
	if (adapter == NULL)
	{
		printk("[%s] get i2c adapter fail at line %d", __FUNCTION__, __LINE__);
	}
	else
	{
		g_client[14] = i2c_new_client_device(adapter, &ix8a_bwde_i2c_devices[8]);		// pca9548_5 SFP
		i2c_put_adapter(adapter);
	}

	adapter = i2c_get_adapter(0x0a);
	if (adapter == NULL)
	{
		printk("[%s] get i2c adapter fail at line %d", __FUNCTION__, __LINE__);
	}
	else
	{
		g_client[15] = i2c_new_client_device(adapter, &ix8a_bwde_i2c_devices[9]);		// pca9548_6 SFP
		i2c_put_adapter(adapter);
	}

	adapter = i2c_get_adapter(0x0b);
	if (adapter == NULL)
	{
		printk("[%s] get i2c adapter fail at line %d", __FUNCTION__, __LINE__);
	}
	else
	{
		g_client[16] = i2c_new_client_device(adapter, &ix8a_bwde_i2c_devices[10]);		// pca9548_7 SFP
		i2c_put_adapter(adapter);
	}

	adapter = i2c_get_adapter(0x03);
	if (adapter == NULL)
	{
		printk("[%s] get i2c adapter fail at line %d", __FUNCTION__, __LINE__);
	}
	else
	{
		g_client[17] = i2c_new_client_device(adapter, &ix8a_bwde_i2c_devices[3]);		// eeprom
		i2c_put_adapter(adapter);
	}

	for(i = 13; i < 69; i ++){
		adapter = i2c_get_adapter(i);
		if (adapter == NULL)
		{
			printk("[%s] get i2c adapter fail at line %d", __FUNCTION__, __LINE__);
		}
		else
		{
			if (i < 61)  // SFP28 1~48 EEPROM
				g_client_port[i - 13] = i2c_new_client_device(adapter, &ix8a_bwde_i2c_devices[19]);
			else  // QSFP 49~56 EEPROM
				g_client_port[i - 13] = i2c_new_client_device(adapter, &ix8a_bwde_i2c_devices[15]);
			i2c_put_adapter(adapter);
		}
	}

	return 0;

fail_platform_device:
	platform_device_put(ix8a_bwde_device);

fail_platform_driver:
	platform_driver_unregister(&ix8a_bwde_platform_driver);
	return ret;
}